c# - 将 json 数组转换为数据表 asp.net

标签 c# asp.net json vb.net json.net

拜托,我对 json 很陌生。我有一个 url,我传递值并且返回的数据采用 json 格式。我需要反序列化此 url 中的 json,然后将其绑定(bind)到 asp.net 中的 ListView 控件。这就是 json 数据的样子。

   {"records":[{"record":{"Ch_ID":"27","User_id":"1","Ch_Name":"test1","Ch_Description":"test1description","Ch_Starttime":""}},{"record":{"Ch_ID":"29","User_id":"1","Ch_Name":"w","Ch_Description":"ww","Ch_Starttime":"12"}},{"record":{"Ch_ID":"30","User_id":"1","Ch_Name":"qq","Ch_Description":"qqqdescription","Ch_Starttime":"1222"}},{"record":{"Ch_ID":"31","User_id":"1","Ch_Name":"v","Ch_Description":"vv","Ch_Starttime":"1"}},{"record":{"Ch_ID":"32","User_id":"1","Ch_Name":"n","Ch_Description":"nnnn","Ch_Starttime":"111"}}]} 

有谁知道我该如何做到这一点。我已经尝试过 json.net 但它给了我错误。

最佳答案

Json.NET 确实支持通过其内置的 DataTableConverter 反序列化 DataTable ,但是它希望将 JSON 格式化为数组,如下所示:

[
  {
    "Ch_ID": "27",
    "User_id": "1",
    // Other fields
  },
  {
    "Ch_ID": "29",
    "User_id": "1",
    // Other fields
  },
  // Other records
]

您的 JSON 的格式如下:

{
  "records": [
    {
      "record": {
        "Ch_ID": "27",
        "User_id": "1",
        // Other fields
      }
    },
    {
      "record": {
        "Ch_ID": "29",
        "User_id": "1",
        // Other fields
      }
    },
    // Other records
  ]
}

您可以使用 custom JsonConverter 将实际的 JSON 转换为 Json.NET 所需的格式。 :

public class RecordDataTableConverter : Newtonsoft.Json.Converters.DataTableConverter
{
    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        if (reader.TokenType == JsonToken.Null)
            return null;
        if (reader.TokenType == JsonToken.StartObject)
        {
            var token = JToken.Load(reader);
            token = new JArray(token.SelectTokens("records[*].record"));
            using (var subReader = token.CreateReader())
            {
                while (subReader.TokenType == JsonToken.None)
                    subReader.Read();
                return base.ReadJson(subReader, objectType, existingValue, serializer); // Use base class to convert
            }
        }
        else
        {
            return base.ReadJson(reader, objectType, existingValue, serializer);
        }
    }
}

并按如下方式使用它:

var json = GetJson();

var settings = new JsonSerializerSettings
{
    Converters = new[] { new RecordDataTableConverter() },
};

var table = JsonConvert.DeserializeObject<DataTable>(json, settings);

样本fiddle .

关于c# - 将 json 数组转换为数据表 asp.net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39921337/

相关文章:

c# - 关于从 C# 使用 COM 的任何好的教程?

.net - 使用 ASP.NET 和 Ajax 创建共享工作区

java - 在 MongoDB 上以日期格式保存 json 日期字段

json - 将硬编码属性添加到 json 输出

c# - 在 NHibernate 中制作数据访问方法的最佳方法是什么?

c# - 如何阻止 RichTextBox Inline 在 TextChanged 中被删除?

c# - .NET WinForms 中 UI 元素的授权

asp.net - 高级数据库搜索示例

asp.net - MVC 区域路由 - 带文件夹的 Controller 文件夹

java - Jackson ObjectMapper readValue() 解析为对象时无法识别字段