使用Json.NET从Json String反序列化嵌套的DataSet

时间:2017-02-07 12:03:30

标签: c# json.net

我尝试使用Json.NET从JSON字符串反序列化DataSet。 Json String包含我想要使用的状态,消息和表:

{
    "status": "ok",
    "message": "",
    "table": [{
        "column1": "value1",
        "column2": "value2"
    }, {
        "column1": "value3",
        "column2": "value4"
    }]
}

这是我的来源:

    public class RequestResult
    {
        public string status { get; set; }
        public string message { get; set; }
    }

    ...

    var serializer = new JsonSerializer();
    var sr = new StreamReader(response.GetResponseStream()).ReadToEnd();
    var rr = JsonConvert.DeserializeObject<RequestResult>(sr);

    // Without status and message the following works fine like here: 
    // http://www.newtonsoft.com/json/help/html/DeserializeDataSet.htm
    DataSet dataSet = JsonConvert.DeserializeObject<DataSet>(sr);
    gridControlMain.DataSource = dataSet.Tables["table"];

如果我使用没有状态和消息的Json字符串它工作正常,但我需要状态和消息!来自Json.NET的异常消息是: 读取DataTable时出现意外的JSON令牌。预期的StartArray,得到了String。路径'状态',第1行,第14位。 我该如何管理?

祝你好运

1 个答案:

答案 0 :(得分:2)

您的代码段显示了一个对象,其中包含三个属性statusmessagetable。无法将此对象反序列化为DataTable。 table属性可以。

您可以将此代码段反序列化为具有两个字符串和一个DataTable属性的类,例如:

class MyTableUtilClass
{
    public string Status{get;set;}
    public string Message {get;set;}
    public DataTable Table{get;set;}
}


var myUtil=JsonConvert.DeserializeObject<MyTableUtilClass>(jsonText);
DataTable myTable=myUtil.Table;