我有一段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类?
答案 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"}
}
这种方式一定是可能的。