将表检索为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"}]

正如你所看到的,很难知道一行在哪里结束

是否有一种方法以更清晰的方式检索数据?

将表检索为JSON,无论c#中有多少列

您提供的模型实际上建模单个单元格,而不是一个表。

我建议您使用以下模型:

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有一个良好的开端,它将为您提供序列化所需的内容。但我建议你坚持到底,因为能够序列化和反序列化到强类型对象可以帮助捕获编译时错误,并在序列化失败(即坏数据)时警告你