【问题标题】:Form Dynamic JSON array in C#在 C# 中形成动态 JSON 数组
【发布时间】:2017-06-07 18:50:58
【问题描述】:

对于 Web 服务,我需要根据存储过程提供的数据创建动态 JSON 数组作为响应发送。

var t = new Dictionary<string, dynamic>();
for (int i = 0; i < reader.FieldCount; i++)
{
  columnName = reader.GetName(i);
  fieldValue = reader.GetValue(i).ToString();
  t[columnName] = fieldValue;
}
_response.data.Add(t);

但收到的响应是数据:[[{“key”:“name”,“value”:“123”},{“date”:“01-Jun-2017”}],[{“key” : "名称", "值": "abc"}]]

而需要的响应是:[{ "name": "abc", "date": "01-Jun-2017"},{ "name": "123"}]

谁能告诉我可能是什么问题?

提前致谢。

【问题讨论】:

  • 您需要显示将您的Dictionary 转换为JSON 的代码,并且很高兴看到您如何阅读多条记录
  • 首先,您无需将字典标记为&lt;string, dynamic&gt;,因为无论如何您都在将值转换为字符串。其次,正如@Vikhram 所说 - 这取决于您使用的 JSON 序列化程序。例如,Newtonsoft 专门为此提供了一个名为 JObject 的类。
  • 你能检查一下这个stackoverflow.com/questions/5597349/… convert dictionary into json..
  • 我认为使用字典是个坏主意。如果响应中可能有具有相同列名的数据,那么就会因为重复而引发问题。我建议你使用列表

标签: c# arrays json


【解决方案1】:

您应该创建一个类似于您的 JSON 结构的 C# 类。

public class SomeClassName
{
    public string name { get; set; }
    public string date { get; set; }
}

然后代替字典,使用上述类的列表如下:

List<SomeClassName> t = new List<SomeClassName>();
for (int i = 0; i < reader.FieldCount; i++)
{
    t.Add(new SomeClassName() { name = reader.GetName(i), date = reader.GetValue(i).ToString() });
}
_response.data.Add(t);

【讨论】:

    【解决方案2】:

    也许这个库可以帮助你,它可以节省你的时间

    http://www.newtonsoft.com/json

    【讨论】:

      【解决方案3】:

      您可以在 C# 中使用匿名类型。

      new { key = value, ...};
      

      例如

      List<object> lst = new List<object>();
      lst.Add(new { Name = "Andrey", Age = 31 });
      lst.Add(new { Name = "Martha" });
      
      // print [{"Name":"Andrey","Age":31},{"Name":"Martha"}]
      Console.WriteLine(JsonConvert.SerializeObject(lst));
      

      【讨论】:

      • 键和值都是动态生成的,我们不确定它可能是什么。所以我们不能直接将姓名和年龄添加到列表中!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多