You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

反序列化JSON文件时遭遇SerializationException异常求助

问题排查与解决方案

异常原因

你遇到的SerializationException核心原因是JSON数据结构与反序列化目标类型不匹配:

  • 你的JSON实际是多个ServiceEntity对象组成的数组,但当前代码尝试将其反序列化为单个ServiceEntity实例,解析器会把数组中每个对象的同名字段识别为重复数据项,触发异常。
  • 另一种可能是JSON单个对象内部存在重复的字段键(比如同一对象内重复定义ServiceName),但结合你代码中的while循环(意图遍历多个实体),前者的概率更高。

解决方案

1. 调整反序列化目标为集合类型

将反序列化的目标类型从单个ServiceEntity改为List<ServiceEntity>,同时修改调用逻辑为遍历集合:

修改调用代码

List<ServiceEntity> resultEntities = JsonHelper<List<ServiceEntity>>.Deserialize(DestinationFilePath);

foreach (var resultEntity in resultEntities)
{
    ListViewItem listViewItem = new ListViewItem(new string[] { 
        resultEntity.ServiceName, 
        resultEntity.ServiceStatus.ToString(), 
        resultEntity.DisplayName 
    });
    lvServices.Items.Add(listViewItem);
}

2. 修正JSON数据(针对单个对象存在重复字段的情况)

如果你的JSON本该是单个ServiceEntity对象,检查并清理JSON内容,确保每个字段键只出现一次,比如删除重复的"ServiceName"或DisplayName条目。

3. 优化反序列化方法(避免空文件异常)

当前方法使用FileMode.OpenOrCreate会在文件不存在时创建空文件,导致反序列化失败,建议添加文件存在检查并调整文件模式:

public static T Deserialize(string FilePath)
{
    if (!File.Exists(FilePath))
        return default(T);
        
    using (FileStream FS = new FileStream(FilePath, FileMode.Open))
    {
        DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
        return (T)serializer.ReadObject(FS) ?? default(T);
    }
}

内容的提问来源于stack exchange,提问作者zeroG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 23:30:42