如何解析JSONString到数据集?

我正在使用Web服务创建一个C#应用程序。 在我的Web服务中,我使用的是JSONString数据。 但是我无法将此字符串转换为DataSet

我的JSONString是:

 { "Table": [ { "DisplayVoucherNumber": "A101239Z", "ActualDate": "08/07/2013", "AccountName": "shyamal", "Pcs": "50", "Weight": "500.000" } ], "Table1": [ { "DisplayVoucherNumber": "R101249B", "ActualDate": "11/07/2013", "AccountName": "vipul", "NetWeight": "90.000", "Weight": "80.000", "Difference": "10.000" }, { "DisplayVoucherNumber": "R101249B", "ActualDate": "11/07/2013", "AccountName": "vipul", "NetWeight": "500.000", "Weight": "100.000", "Difference": "400.000" } ] } 

你的问题不是很清楚。 我想你想做的就是在deserializtion之后找回一个可以映射到你数据集的对象。 就像是

 DataSet myDataSet= JsonConvert.DeserializeObject(jsonstring) 

并且您继续使用数据集进行编码。 比如访问数据集中的数据表。

如果这是你想要达到的目标,并且不想像以前的答案那样使用你自己的POCO。 您可能需要先创建一个Typed DataSet

给定符合XML架构定义语言(XSD)标准的XML架构,您可以使用随Windows软件开发工具包(SDK)提供的XSD.exe工具生成强类型DataSet。 有关强类型数据集的更多信息

这将允许您使用Deserialize方法使用强类型数据集。

请记住,您必须在XML Schema中模仿您的JSon结构。 为了在最后与你的JSon结构兼容。

作为一个动态 C#解决方案(当你不知道要反序列化的对象结构时)使用@ Dhaval的答案并且在使用Deserialize<>()方法后,我使用下面的方法来做到这一点:

更新: DataSet.ReadXml在读取XML节点时有一些选项作为XmlReadMode

 private static DataSet ReadDataFromJson(string jsonString, XmlReadMode mode = XmlReadMode.Auto) { //// Note:Json convertor needs a json with one node as root jsonString = "{ \"rootNode\": {" + jsonString.Trim().TrimStart('{').TrimEnd('}') + @"} }"; //// Now it is secure that we have always a Json with one node as root var xd = JsonConvert.DeserializeXmlNode(jsonString); //// DataSet is able to read from XML and return a proper DataSet var result = new DataSet(); result.ReadXml(new XmlNodeReader(xd), mode); return result; } 

例如,如果要从数据推断强类型模式:

 var dataset = ReadDataFromJson(yourString, XmlReadMode.InferTypedSchema); 
 Private Function convertJsonStringToDataSet(jsonString As String) As DataSet Dim xd As New XmlDocument() jsonString = "{ ""rootNode"": {" + jsonString.Trim().TrimStart("{"c).TrimEnd("}"c) + "} }" xd = DirectCast(Newtonsoft.Json.JsonConvert.DeserializeXmlNode(jsonString), XmlDocument Dim ds As New DataSet() ds.ReadXml(New XmlNodeReader(xd)) Return ds End Function 

我更喜欢你遵循尼克的建议……也许你的网络服务应该被修改,因为我看到每个表和Table1和内部属性的类似属性……

  1. 使用json2csharp.com创建类,我得到了这个

     public class Table { public string DisplayVoucherNumber { get; set; } public string ActualDate { get; set; } public string AccountName { get; set; } public string NetWeight { get; set; } public string Weight { get; set; } public string Pcs { get; set; } public string Difference { get; set; } } 
  2. 使用反序列化json字符串
    List

    list = JsonConvert.DeserializeObject
    >(jsonstring);

  3. 您可以访问该列表对象以放在DataSet上。
  1. 为反序列化数据创建一个

  2. 使用

     YourClass yourObject = JsonConvert.DeserializeObject(jsonStr);