如何使用json.net将命名数据表转换为json

时间:2012-12-24 09:16:44

标签: json

我需要使用json.net在DataTable和json之间进行序列化\反序列化。

我发现json.net igrone是“TableName”Attribute.how我可以添加吗?

像这样的代码。

DataTable table = new DataTable();
table.TableName = "TestTable";
table.Columns.Add("id", typeof(int));
table.Columns.Add("name", typeof(string));
var dr = table.NewRow();
dr["id"] = 1;
dr["name"] = "foo";
table.Rows.Add(dr);

var json = JsonConvert.SerializeObject(table);
var o = JsonConvert.DeserializeObject<DataTable>(json);

当Serialize时,得到了json [{“id”:1,“name”:“foo”}]。这个json没有TableName,并且反序列化它,表也没有TableName。

所以,我需要TableName,我怎么能拥有它?

1 个答案:

答案 0 :(得分:2)

我为JSON.NET创建了一个自定义DataTable转换器。从这里抓取来源:https://github.com/chris-herring/DataTableConverter

像这样使用:

string json = JsonConvert.SerializeObject(table, new Serialization.DataTableConverter());
var o = JsonConvert.DeserializeObject<DataTable>(json, new Serialization.DataTableConverter());

以这种格式序列化/反序列化System.Data.DataTable:

{
    "TableName": "TestTable",
    "Columns": [
        {
            "AllowDBNull": false,
            "AutoIncrement": true,
            "AutoIncrementSeed": 2,
            "AutoIncrementStep": 1,
            "Caption": "PrimaryKey",
            "ColumnName": "PrimaryKey",
            "DataType": "Int32",
            "DateTimeMode": "UnspecifiedLocal",
            "DefaultValue": null,
            "MaxLength": -1,
            "Ordinal": 0,
            "ReadOnly": false,
            "Unique": true
        }
    ],
    "Rows": [
        [
            1
        ],
        [
            2
        ],
        [
            3
        ]
    ],
    "PrimaryKey": ["PrimaryKey"]
}