从json文件反序列化数据时,我遇到“SerializationException”异常:
public static T Deserialize(string FilePath)
{
using (FileStream FS = new FileStream(FilePath, FileMode.OpenOrCreate))
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
return (T)serializer.ReadObject(FS) ?? null;
}
}
这就是我尝试反序列化的方式:
ServiceEntity resultEntity = JsonHelper<ServiceEntity>.Deserialize(DestinationFilePath);
while (resultEntity != null)
{
ListViewItem listViewItem = new ListViewItem(new string[] { resultEntity.ServiceName, resultEntity.ServiceStatus.ToString(), resultEntity.DisplayName });
lvServices.Items.Add(listViewItem);
}
T是这样的:
[DataContract]
sealed class ServiceEntity
{
[DataMember]
public string DisplayName { get; set; }
[DataMember]
public string ServiceName { get; set; }
[DataMember]
public ServiceControllerStatus ServiceStatus { get; set; }
}
JSON数据为:https://pastebin.com/M18GD8yh
2条答案
按热度按时间gwo2fgha1#
您的数据是由数百个JSON对象组成的单行。代码读取整个文件并尝试将其反序列化为单个C#对象。您需要想出一种方法来单独处理每个对象。如果您可以控制输入文件,则将对象放入数组并反序列化可能是一个好的开始。
06odsfpq2#
你所称的json,不是一个有效的json字符串,它只是一个字符串中的一个json类peace的集合。但是你可以很容易地修复它
之后,您可以将其解析为Json数组
也可以在c#类中反序列化它
或者试试你的串行器。
以json格式输出
更新
如果你有一个从c#对象创建json的代码,最好在那里修复它。恕我直言,你可以使用Newtonsonft.Json作为一个序列化器。你可以使用一个Nuget包来安装它。之后使用这段代码
如果你需要保存这个json到一个文件中