0

我需要使用 json.net 在 DataTable 和 json 之间进行 Serialize\Deserialze。

我发现 json.net 忽略了“TableName”属性。我该如何添加它?

像这样的代码。

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);

序列化时,得到 json [{"id":1,"name":"foo"}]。这个json没有表名,反序列化,表也没有表名。

所以,我需要 TableName ,我怎么能拿着它?

4

1 回答 1

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"]
}
于 2013-03-28T02:11:28.413 回答