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がなく、それをDeserializeすると、テーブルにもTableNameがありません。

だから、私は 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 に答える