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を含めると、配列をロードすると言うことができ、新しい配列アイテムごとに新しいDataPointをJArray a = JArray.Parse(datapoints);手動でアップしますnew予想されるスロットの値を入力します。クラスのプロパティを装飾して、より美しくすることができる属性を私は知りません。Linq to Jsonを使用して、これをそれほど醜いものにすることはできません。

于 2012-06-04T16:36:11.623 に答える