将 JSON 数组序列化为类的实例
本文关键字:实例 序列化 JSON 数组 | 更新日期: 2023-09-27 18:36:11
如果我有JSON数据,例如:
{
"datapoints":[ [null, 1234567890, "point1"], [null, 1234567890, "point2"] ]
}
有没有办法将该数据反序列化为以下类:
public class Result
{
public DataPoint[] DataPoints {get;set;}
}
public class DataPoint
{
public string Name {get;set;}
public string Value {get;set;}
public DateTime Timestamp {get;set;}
}
是否可以指定要序列化为哪个属性的数组成员的索引?
如果您愿意使用 Json.Net 进行某些自定义反序列化
string json = @"{""datapoints"":[ [null, 1234567890, ""point1""], [null, 1234567890, ""point2""] ]}";
var result = (JObject)JsonConvert.DeserializeObject(json);
var dataPoints = result["datapoints"]
.Select(t => new DataPoint()
{
Timestamp = String.IsNullOrEmpty(t[0].ToString()) ? DateTime.MinValue : DateTime.Parse(t[0].ToString()),
Value = t[1].ToString(),
Name= t[2].ToString()
})
.ToArray();
PS:根据格式的不同,Timestamp
可能需要更多工作。
很难确切地说,因为您没有指定如何反序列化数据。
如果可以使用外部库,我建议使用 Json.Net - 它比System.Web.Script.Serialization.JavaScriptSerializer更好。
编辑以解决(非常有效!)问题 - 正如 SO 的其他地方所提到的,如果您包含 Json.Net,您将能够说JArray a = JArray.Parse(datapoints);
加载数组,然后您将为每个新数组项手动new
新的数据点,并用预期插槽中的值填充它。 我不知道您可以使用哪些属性来装饰类属性,从而使它更漂亮。 你可能会使用它的Linq to Json来使这件事变得不那么丑陋。