我需要反序列化包含一系列表的JSON字符串,但是其中一个类仅包含一个字符串,并且不包含标题。所以我不知道如何只用一个字符串指定类。
这是一个简化的示例:
"tables" : {
"tableId1" : {
"name" : "Name_Of_The_Table"
},
"tableId2" : {
"name" : "Name_Of_The_Table"
},
...
}
实际上,大约有100多个不同的表,每个表都有自己的名字。
我用于反序列化的类如下:
public class jsonBaseClass
{
public List<tableClass> tables {get; set;}
}
public class tableClass
{
public string name {get; set;}
}
所以我遇到的问题是我需要在tableClass中也包含tableId,但是我不知道该如何包含它。
有人有主意吗?
答案 0 :(得分:0)
您可以使用JsonProperty属性来获得所需的结果,这是一个示例:
public class Program
{
public static void Main(string[] args)
{
string data = @"{
'tables' : {
'tableId1' : {
'name' : 'Name_Of_The_Table'
},
'tableId2' : {
'name' : 'Name_Of_The_Table'
}
}
}";
RootObject deserializedObject = JsonConvert.DeserializeObject<RootObject>(data);
Console.WriteLine(JsonConvert.SerializeObject(deserializedObject, Formatting.Indented));
}
}
public class RootObject
{
[JsonProperty("tables")]
public TableCollection Tables { get; set; }
}
public class TableCollection
{
[JsonProperty("tableId1")]
public Table1 Table1 { get; set; }
[JsonProperty("tableId2")]
public Table2 Table2 { get; set; }
}
public class Table1
{
[JsonProperty("name")]
public string Name { get; set; }
}
public class Table2
{
[JsonProperty("name")]
public string Name { get; set; }
}
输出:
{
"tables": {
"tableId1": {
"name": "Name_Of_The_Table"
},
"tableId2": {
"name": "Name_Of_The_Table"
}
}
}
或者,如果属性名称未知,则使用JSON.NET LINQ。
public class Program
{
public static void Main(string[] args)
{
string data = @"{
'tables' : {
'tableId1' : {
'name' : 'Table1'
},
'tableId2' : {
'name' : 'Table2'
}
}
}";
JObject deserializedObject = JsonConvert.DeserializeObject<JObject>(data);
List<JObject> tableObjectList = deserializedObject["tables"]
.Cast<JProperty>()
.Select(x => x.Value)
.Cast<JObject>()
.ToList();
List<string> tableIDList = deserializedObject["tables"]
.Cast<JProperty>()
.Select(x => x.Name)
.ToList();
Console.WriteLine(JsonConvert.SerializeObject(tableObjectList, Formatting.Indented));
Console.WriteLine(JsonConvert.SerializeObject(tableIDList, Formatting.Indented));
}
}
输出:
[
{
"name": "Table1"
},
{
"name": "Table2"
}
]
[
"tableId1",
"tableId2"
]