如果我有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;}
}
我可以指定要序列化到哪个属性的数组成员的索引吗?
答案 0 :(得分:2)
如果您对使用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
可能需要更多工作,具体取决于格式。
答案 1 :(得分:0)
很难确切地说,因为您没有指定如何反序列化数据。
如果有可能使用外部库,我建议使用Json.Net - 它比 System.Web.Script.Serialization.JavaScriptSerializer 更好用。
编辑以解决(非常有效!)问题 - 如前所述elsewhere on SO,如果你包含Json.Net,你可以说JArray a = JArray.Parse(datapoints);
加载你的阵列,然后你' d为每个新数组项手动new
新的DataPoints,并使用预期的插槽中的值填充它。我不知道你可以装饰你的类属性的属性,这将使任何更漂亮。你可能会使用它的Linq to Json来使这个变得不那么丑陋了。