使用JSON.NET反序列化格式错误的JSON

时间:2015-06-15 13:07:10

标签: c# json.net

我有一段JSON,如下所示:

{"123":{"name":"test","info":"abc"}}

123是一个ID,可以在每个请求中更改。这是我无法控制的。

我想使用JSON.NET反序列化JSON。我试过了:

 User u = JsonConvert.DeserializeObject<User>(json);

但是,除非我像这样定义JsonProperty属性,否则这不起作用:

[JsonProperty("123")]
public string ID { get; set; }

但我当然不能这样做,因为ID 123会在每次请求时发生变化。

如何使用JSON.NET读取ID属性并将其应用于ID类?

3 个答案:

答案 0 :(得分:4)

试试这个:

var json = "{\"123\":{\"name\":\"test\",\"info\":\"abc\"}}";

var rootObject = JsonConvert.DeserializeObject<Dictionary<string, User>>(json);
var user = rootObject.Select(kvp => new User 
                                    { ID = kvp.Key, 
                                      Name = kvp.Value.Name, 
                                      Info = kvp.Value.Info 
                                    }).First();

这确实有一些不必要的开销,但考虑到情况,它会这样做。

答案 1 :(得分:2)

我这样做:

dynamic result = JsonConvert.DeserializeObject(json);

var myObject = result as JObject;
var properties = myObject.Properties();
var property = properties.FirstOrDefault(); // take first element 
string name = property.Name;

foreach (var item in properties)
{
    var jProperty = item as JProperty;
    var nestedJson = jProperty.Value.ToString();
    dynamic nestedResult = JsonConvert.DeserializeObject(nestedJson); // or put it into a model/data structure
}

答案 2 :(得分:0)

如何按如下方式构建JSON(如果允许更改JSON模式):

{
    "ID": "123",
    "Properties":{"name":"test","info":"abc"}
}

这种方式一定是可能的。