如何将String(json-like)转换为Object

时间:2012-11-06 15:36:52

标签: c# asp.net-web-api

在我的控制器中,我得到一个JSON字符串:

String json_string = this.Request.Content.ReadAsStringAsync().Result;

看起来像这样:

{
    "21": {"Id":21,"DisplayOrder":3, ... snip ... },
    "333":{"Id":333,"DisplayOrder":2, ... snip ... },
    "591":{"Id":591,"DisplayOrder":1, ... snip ... }
}

我对这个JSON的结构没有发言权,所以无法将其格式化为没有键的东西。它们不是必需的,因为ID在该词典的值内。

在任何情况下,如何以这样的方式转换json_string,这样我可以在迭代结构中的'rows'时拉出我想要的两个项目... Id,DisplayOrder?

像这样:

int Id = row_item.Id;
int DisplayOrder = row_item.DisplayOrder;

谢谢! 埃里克

1 个答案:

答案 0 :(得分:0)

string json = @"{
    ""21"": {""Id"":21,""DisplayOrder"":3},
    ""333"":{""Id"":333,""DisplayOrder"":2},
    ""591"":{""Id"":591,""DisplayOrder"":1}}";

var list = new JavaScriptSerializer()
               .Deserialize<Dictionary<string, Dictionary<string, object>>>(json)
               .Values
               .ToList();

Console.WriteLine(list[0]["Id"]); // <--21

您也可以使用Json.Net

执行相同的操作
var jObj = JsonConvert
           .DeserializeObject<Dictionary<string, Dictionary<string, object>>>(json)
           .Values
           .ToList();

Console.WriteLine(jObj[0]["Id"]);

dynamic也可以使用

var jObj = JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(json)
            .Values
            .ToList();

Console.WriteLine(jObj[0].DisplayOrder);