使用随机密钥反序列化JSON

时间:2013-02-03 14:04:03

标签: c# json

我正在访问以下格式返回JSon的API:

{"status":1,"complete":1,"list":{"293352541":{"item_id":"293352541","fave":"0"},"247320106":{"item_id":"247320106","fave":"0"},"291842735":{"item_id":"291842735","fave":"0"} .....

我遇到的问题是 item_id标记之前的数字。它打破了我在反序列化时所做的任何尝试,因为我不能在我反序列化的对象中表示这个随机整数。

我希望这个数字是,例如,单词“Item”,因此它是表示封闭对象的键,但是这个数字意味着我无法创建JSon的对象表示。

所以

public class MyClass
{
    public string status { get; set; }
    public string complete { get; set; }
    public List<MyObject> list { get; set; }
}

public class MyObject
{
    public string item_id { get; set; }
    public string fave { get; set; }
}

然后

 var items = new JavaScriptSerializer().Deserialize<MyClass>(jsontext);

dersialises,但items.list为空。

另外,

dynamic result = JSon.Parse(jsontext);

有效,但我不能以一种很好的方式反序列化或访问项目列表。

有没有办法做到这一点?感谢

1 个答案:

答案 0 :(得分:1)

因为它不需要预定义类型来反序列化,所以可以使用json.net(也可以使用nuget)执行此操作。例如:

var jObj = JObject.Parse(data);
var sense = jObj["list"]
    .Select(x => (JProperty)x)
    .Select(p => new { 
                   propName = p.Name,
                   itemId = p.Value["item_id"],
                   fave = p.Value["fave"]});