2

逆シリアル化するにはどうすればよいですか?

{
    "data": [
        {"ForecastID":8587961,"StatusForecast":"Done"},
        {"ForecastID":8588095,"StatusForecast":"Done"},
        {"ForecastID":8588136,"StatusForecast":"Done"},
        {"ForecastID":8588142,"StatusForecast":"Pending"}
    ]
}

class RawData
{
    public string data { get; set; }
}

だから、私はただ欲しい

[
  {"ForecastID":8587961,"StatusForecast":"Done"},
  {"ForecastID":8588095,"StatusForecast":"Done"},
  {"ForecastID":8588136,"StatusForecast":"Done"},
  {"ForecastID":8588142,"StatusForecast":"Pending"}
]

RawDataのクラスインスタンスのプロパティデータの値として。

4

2 に答える 2

4

Json.Net の使用

var obj = (JObject)JsonConvert.DeserializeObject(json);
var newJson = obj["data"].ToString();

または組み込みのJavaScriptSerializerを使用する

var dict = new JavaScriptSerializer().Deserialize<Dictionary<string, object>>(json);
var newjson = new JavaScriptSerializer().Serialize(dict["data"]);
于 2012-08-19T08:20:48.673 に答える
2

この JSON 構造を次のように逆シリアル化する方がはるかに理にかなっています。

public class Forecast
{
    public IEnumerable<ForecastData> Data { get; set; }
}

public class ForecastData
{
    public int ForecastID { get; set; }
    public string StatusForecast { get; set; }
}

これは、フレームワークに組み込まれているJavaScriptSerializerクラスでは非常に簡単です。

string json = "your JSON data here";
IEnumerable<ForecastData> data = new JavaScriptSerializer()
    .Deserialize<Forecast>(json)
    .Data;

または、モデルを定義したくない場合は、次のようにすることができます。

dynamic result = new JavaScriptSerializer().DeserializeObject(json);
foreach (var item in result["data"])
{
    Console.WriteLine("{0}: {1}", item["ForecastID"], item["StatusForecast"]);
}
于 2012-08-19T09:06:25.153 に答える