2

如果我有 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;}
}

我可以指定要序列化到哪个属性的数组成员的索引吗?

4

2 回答 2

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可能需要更多的工作,具体取决于格式。

于 2012-06-04T18:15:39.250 回答
0

很难准确地说,因为您没有指定如何反序列化数据。

如果可以使用外部库,我建议使用Json.Net - 它比System.Web.Script.Serialization.JavaScriptSerializer好用得多。

编辑以解决(非常有效!)问题 - 如SO 其他地方所述,如果您包含 Json.Net,您可以说JArray a = JArray.Parse(datapoints);加载您的数组,然后new为每个新数组项手动设置新的 DataPoints并使用预期插槽中的值填充它。我不知道你可以用它来装饰你的类属性的属性会使它更漂亮。您可能会使用它的 Linq to Json 来让这件事变得不那么丑陋。

于 2012-06-04T16:36:11.623 回答