我有一个看起来像这样的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 类?
试试这个:
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();
这确实有一些不必要的开销,但考虑到情况,它会这样做。
我会这样做:
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
}
如何形成如下 JSON(如果允许更改 JSON 模式):
{
"ID": "123",
"Properties":{"name":"test","info":"abc"}
}
这样一定是可能的。