C# 使用json.NET的数组数组反序列化json字符串 stringjson=@”{ ‘symbol’:‘XX’, “列名称”:[“日期”、“打开”、“高”、“低”、“关闭”、“卷”], “数据”:[ ['2014-01-02',25.78,25.82,25.47,25.79,31843697.0], ['2013-12-31',25.81,26.04,25.77,25.96,22809682.0]]}"; 公共类每日数据 { 公共字符串符号{get;set;} 公共列表数据{get;set;} } 公共课一天 { 公共日期时间日期{get;set;} 公共双开{get;set;} 公共双高{get;set;} 公共双低位{get;set;} 公共双关闭{get;set;} 公共双卷{get;set;} } DailyData dd=JsonConvert.DeserializeObject(json);

C# 使用json.NET的数组数组反序列化json字符串 stringjson=@”{ ‘symbol’:‘XX’, “列名称”:[“日期”、“打开”、“高”、“低”、“关闭”、“卷”], “数据”:[ ['2014-01-02',25.78,25.82,25.47,25.79,31843697.0], ['2013-12-31',25.81,26.04,25.77,25.96,22809682.0]]}"; 公共类每日数据 { 公共字符串符号{get;set;} 公共列表数据{get;set;} } 公共课一天 { 公共日期时间日期{get;set;} 公共双开{get;set;} 公共双高{get;set;} 公共双低位{get;set;} 公共双关闭{get;set;} 公共双卷{get;set;} } DailyData dd=JsonConvert.DeserializeObject(json);,c#,arrays,json,json.net,C#,Arrays,Json,Json.net,这是我的json字符串和类,我正试图用json.net反序列化它。如果我将publicList data{get;set;}更改为public List data{get;set;},它将起作用。但在这种情况下,我必须进一步执行更多步骤。是否有一个简单的解决方案可以一次性将其反序列化?是的,您必须使用JsonConverter类告诉反序列化器如何在某一天将值数组映射到类 示例: string json = @"{ 'symbol':'XX', 'column_names":["Date","Op

这是我的json字符串和类,我正试图用
json.net
反序列化它。如果我将public
List data{get;set;}
更改为
public List data{get;set;},它将起作用
。但在这种情况下,我必须进一步执行更多步骤。是否有一个简单的解决方案可以一次性将其反序列化?

是的,您必须使用
JsonConverter
类告诉反序列化器如何在某一天将值数组映射到

示例:

string json = @"{
'symbol':'XX',
'column_names":["Date","Open","High","Low","Close","Volume"],
'data':[
['2014-01-02',25.78,25.82,25.47,25.79,31843697.0],
['2013-12-31',25.81,26.04,25.77,25.96,22809682.0]]}";

public class DailyData
{
    public string symbol { get; set; }
    public List<OneDay> data { get; set; }
}

public class OneDay
{
     public DateTime date { get; set; }
     public double open { get; set; }
     public double high { get; set; }
     public double low { get; set; }
     public double close { get; set; }
     public double volume { get; set; }
}

DailyData dd = JsonConvert.DeserializeObject<DailyData>(json);
void Main()
{
字符串json=@”{
‘symbol’:‘XX’,
'列名称':['日期','开放','高','低','关闭','卷'],
“数据”:[
['2014-01-02',25.78,25.82,25.47,25.79,31843697.0],
['2013-12-31',25.81,26.04,25.77,25.96,22809682.0]
]
}";
DailyData dd=JsonConvert.DeserializeObject(json);
dd.Dump();
}
类OneDayJsonConverter:JsonConverter
{
公共覆盖布尔CanConvert(类型objectType)
{
抛出新的NotImplementedException();
}
公共重写对象ReadJson(JsonReader阅读器,类型objectType,对象existingValue,JsonSerializer序列化程序)
{
OneDay obj=新的OneDay();
obj.date=reader.ReadAsDateTime()??DateTime.MinValue;
obj.open=(双精度)(reader.ReadAsDecimal()??0);
obj.high=(双精度)(reader.ReadAsDecimal()??0);
obj.low=(双精度)(reader.ReadAsDecimal()??0);
obj.close=(双精度)(reader.ReadAsDecimal()??0);
obj.volume=(双精度)(reader.ReadAsDecimal()??0);
reader.Read();
返回obj;
}
公共重写void WriteJson(JsonWriter编写器、对象值、JsonSerializer序列化器)
{
抛出新的NotImplementedException();
}
}
公共类每日数据
{
公共字符串符号{get;set;}
公共列表数据{get;set;}
}
[JsonConverter(typeof(OneDayJsonConverter))]
公共课一天
{
公共日期时间日期{get;set;}
公共双开{get;set;}
公共双高{get;set;}
公共双低位{get;set;}
公共双关闭{get;set;}
公共双卷{get;set;}
}
结果:

string json = @"{
'symbol':'XX',
'column_names":["Date","Open","High","Low","Close","Volume"],
'data':[
['2014-01-02',25.78,25.82,25.47,25.79,31843697.0],
['2013-12-31',25.81,26.04,25.77,25.96,22809682.0]]}";

public class DailyData
{
    public string symbol { get; set; }
    public List<OneDay> data { get; set; }
}

public class OneDay
{
     public DateTime date { get; set; }
     public double open { get; set; }
     public double high { get; set; }
     public double low { get; set; }
     public double close { get; set; }
     public double volume { get; set; }
}

DailyData dd = JsonConvert.DeserializeObject<DailyData>(json);

Dump()是LINQPad提供的一种扩展方法,用于提供您在上面的屏幕截图中看到的输出。您应该尝试一下LINQPad。谢谢Dominic,我会研究它