将表检索为JSON,无论c#中有多少列
本文关键字:多少 无论 检索 JSON | 更新日期: 2023-09-27 18:15:48
我需要构建一个只接收表名的webservice。
我正在考虑这样做:
public class Table
{
public string field{ get; set; }
public string value{ get; set; }
}
因为我不知道用户要请求什么表,也不知道他们有多少列。
我正在使用WCF web服务,我想在JSON格式检索表;到目前为止,我有这样的东西(一个有3列的表):
[{"field":"ID","value":"124"},{"field":"DES","value":"AValue"},{"field":"CODE","value":"ACode"},{"field":"ID","value":"125"},{"field":"DES","value":"AnotherV"},{"field":"CODE","value":"AnotherCode"}]
正如你所看到的,很难知道一行在哪里结束
是否有一种方法以更清晰的方式检索数据?
您提供的模型实际上建模单个单元格,而不是一个表。
我建议您使用以下模型:
public class Row : Dictionary<string,string>
{
}
public class Table : List<Row>
{
}
那么你可以这样使用:
Table table = new Table
{
new Row
{
{"Name", "Adam"},
{"Age", "13"},
{"Location","USA"}
},
new Row
{
{"Name", "James"},
{"Age", "19"},
{"Location", "Europe"}
}
};
下面是一个如何将该对象序列化为JSON的示例:
var result = JsonConvert.SerializeObject(table);
这段代码使用JSON。. NET将Table
对象序列化为字符串。
这将产生以下JSON:
[{"Name":"Adam","Age":"13","Location":"USA"},{"Name":"James","Age":"19","Location":"Europe"}]
如果要对表进行建模,则需要更多粒度:
public class Column
{
public string Name { get; set; }
public string Value { get; set; }
}
public class Row
{
public List<Column> Columns { get; set; }
}
public class Table
{
public List<Row> Rows { get; set; }
}
然后创建数据:
var data = new Table()
{
new Row()
{
new Column()
{
Name = "Name",
Value = "Adam"
},
new Column()
{
Name = "Age",
Value = "13"
},
new Column()
{
Name = "Location",
Value = "USA"
}
},
new Row()
{
new Column()
{
Name = "Name",
Value = "James"
},
new Column()
{
Name = "Age",
Value = "19"
},
new Column()
{
Name = "Location",
Value = "Europe"
}
}
}
然后序列化为
[
{
{
"Name":"Name",
"Value":"Adam"
},
{
"Name":"Age",
"Value":"13"
},
{
"Name":"Location",
"Value":"USA"
}
},
{
{
"Name":"Name",
"Value":"James"
},
{
"Name":"Age",
"Value":"19"
},
{
"Name":"Location",
"Value":"Europe"
}
}
]
是的,这更复杂,但我更喜欢它,因为它为您提供了表各部分的强类型表示,但也允许相对容易地访问数据。
@ jacob - massad有一个良好的开端,它将为您提供序列化所需的内容。但我建议你坚持到底,因为能够序列化和反序列化到强类型对象可以帮助捕获编译时错误,并在序列化失败(即坏数据)时警告你