C# 使用单独的列表和对象序列化Json文件
我有一个JSON文件,包含两个字符串对象数组和一个字符串。我需要序列化它,这样我就可以有两个不同的对象,每个对象包含JSON文件中的一个对象,或者类似的列表,如果字符串是单个字符串,那么第一个或最后一个成员就是 我尝试过这里的解决方案,但它给了我错误C# 使用单独的列表和对象序列化Json文件,c#,json,serialization,C#,Json,Serialization,我有一个JSON文件,包含两个字符串对象数组和一个字符串。我需要序列化它,这样我就可以有两个不同的对象,每个对象包含JSON文件中的一个对象,或者类似的列表,如果字符串是单个字符串,那么第一个或最后一个成员就是 我尝试过这里的解决方案,但它给了我错误 using (StreamReader r = new StreamReader("Licensce.json")) { string json = r.ReadToEnd(); List<string> items =
using (StreamReader r = new StreamReader("Licensce.json")) {
string json = r.ReadToEnd();
List<string> items = JsonConvert.DeserializeObject<List<string>>(json);
}
错误是:
无法将当前JSON对象(例如{“名称”:“值”})反序列化为类型“System.Collections.Generic.List`1[System.String]”,因为该类型需要JSON数组(例如[1,2,3])才能正确反序列化。
若要修复此错误,请将JSON更改为JSON数组(例如[1,2,3]),或更改反序列化类型,使其成为可以从JSON对象反序列化的正常.NET类型(例如,不是integer之类的基元类型,也不是数组或列表之类的集合类型)。还可以将JsonObjectAttribute添加到类型中,以强制它从JSON对象反序列化
检查您的json格式或与下面的格式进行比较
var json = @"{
'UsbDevices': [
'SA',
'SB',
'SC',
'SE2',
'SF',
'M'],
'DeviceConnectivityExperationDateTime' : '2020-12-30'
}";
var items = JsonConvert.DeserializeObject<Data>(json);
}
public class Data
{
public Data()
{
this.UsbDevices = new List<string>();
}
public List<string> UsbDevices { get; set; }
public string DeviceConnectivityExperationDateTime { get; set; }
}
var json=@”{
“UsbDevices”:[
"SA",,
“某人”,
“SC”,
“SE2”,
“SF”,
“M”],
“设备连接ExperationDateTime”:“2020-12-30”
}";
var items=JsonConvert.DeserializeObject(json);
}
公共类数据
{
公共数据()
{
this.UsbDevices=新列表();
}
公共列表UsbDevices{get;set;}
公共字符串设备连接扩展日期时间{get;set;}
}
您已经尝试过这个JsonConvert.DeserializeObject(json)
但是,json显然不是字符串列表。你为什么不像所有的例子所显示的那样设计一个具体的类呢?无论如何,我认为这个太宽泛了,因为有太多的例子说明如何在stackoverflow和internetI上实现这一点,我不知道这是否是因为打字错误,但请注意你的Json文件结构是不正确的。
var json = @"{
'UsbDevices': [
'SA',
'SB',
'SC',
'SE2',
'SF',
'M'],
'DeviceConnectivityExperationDateTime' : '2020-12-30'
}";
var items = JsonConvert.DeserializeObject<Data>(json);
}
public class Data
{
public Data()
{
this.UsbDevices = new List<string>();
}
public List<string> UsbDevices { get; set; }
public string DeviceConnectivityExperationDateTime { get; set; }
}