【问题标题】:Create JSON with value as object以值作为对象创建 JSON
【发布时间】:2016-11-09 13:33:14
【问题描述】:

不确定标题是否符合我的实际需要,欢迎提出建议。

我创建了一个这样的 JSON 文件:

{
    "Sonos": [
    {
        "Ips": [
            {
              "Volume": "5",
              "ip": "192.168.10.214"
            },
            {
              "Volume": "5",
              "ip": "192.168.10.204"
            }
          ]
        }
    ]
}

public class GetConfig
{
    public List<Cfg> Sonos { get; set; }
}

public class Cfg
{
    public List<Ip> Ips { get; set; }
}

public class Ip
{
    public string Volume { get; set; }
    public string ip { get; set; }
}

创建 JSON

var list = new List<Cfg>();
        var ips = new List<Ip>();

        foreach (ListViewItem item in sonosListExt1.Items)
        {

            ips.Add(new Ip {Volume = "5", ip = item.Text });
        }

        list.Add(new Cfg { Ips = ips });

        var gC = new GetConfig
        {
            Sonos = list
        };
  ...
  //WRITE TO FILE

我真正想要的(不确定是否有效)

{
 "Sonos": [
{
  "192.168.10.214": [
    {
      "Volume": "5"
    },
    "192.168.10.204": [
    {
      "Volume": "5"
    }
  ]
}
]}

我不知道如何将实际 IP 创建为包含所述 IP 的卷的对象。 或者也许我需要一种不同的方法?

我想做的事

我有一个 IP 列表,遍历这个列表并想从 config.json 文件中获取卷,是否有更好的方法?

【问题讨论】:

  • 'Cfg' 类中的List&lt;Ip&gt;List&lt;KeyValuePair&lt;string,string&gt;&gt; insetad 怎么样?
  • 最终目标是什么?您想检查指定的每个 IP 的卷并为此编写代码或更正 JSON 的格式?
  • 您想要的 JSON 无效。上传到jsonlint.com,你会看到错误Error: Parse error on line 6:。一般来说,如果您希望 IP 地址映射到 JSON 属性名称,您应该使用以 IP 地址为键的字典。参见例如Deserialize nested JSON into C# objects.
  • 我不确定格式是否正确,但这不是问题,我认为来自 dbc 的链接应该足够了,所以现在谢谢!
  • 在 keyValuePair 的情况下,示例输出将是(对于 2 个 Sonos 列表,每个列表有 5 个 ip) - [{"Ips":[{"Key":"10.1.2.0","Value":"0"},{"Key":"10.1.2.1","Value":"1"},{"Key":"10.1.2.2","Value":"2"},{"Key":"10.1.2.3","Value":"3"},{"Key":"10.1.2.4","Value":"4"}]},{"Ips":[{"Key":"10.1.2.0","Value":"0"},{"Key":"10.1.2.1","Value":"1"},{"Key":"10.1.2.2","Value":"2"},{"Key":"10.1.2.3","Value":"3"},{"Key":"10.1.2.4","Value":"4"}]},{"Ips":[{"Key":"10.1.2.0","Value":"0"},{"Key":"10.1.2.1","Value":"1"}.....] Fiddle here - dotnetfiddle.net/PaBSQc

标签: c# json json.net


【解决方案1】:

您的 JSON 无效,我假设您的 JSON 是:

{
  "Sonos": [
    {
      "192.168.10.214": [
        {
          "Volume": "5"
        }
      ],
      "192.168.10.204": [
        {
          "Volume": "5"
        }
      ]
    }
  ]
}

如果是这样,你可以通过这个类结构反序列化它:

class Container
{
    public List<Dictionary<string, List<Cfg>>> Sonos { get; set;}
}

class Cfg
{
    public string Volume { get; set; }
}

// ...
var container = JsonConvert.DeserializeObject<Container>(json);

可以通过以下方式为 JSON 创建模型:

var container = new Container();
container.Sonos = new List<Dictionary<string, List<Cfg>>>
{
    new Dictionary<string, List<Cfg>>
    {
        { "192.168.10.214", new List<Cfg> { new Cfg { Volume = "5" } } }
    }
};

var json = JsonConvert.SerializeObject(container);

【讨论】:

  • 我认为这个问题还不够清楚,但我想创建 json(如您的代码中所示),使用此代码,我将如何向 json 添加/创建值
  • 完美,完全理解您的代码并适应了它!谢谢!
【解决方案2】:

如果您使用 VS 2015 并且您已经有一个现有的 Json 或 Xml 结构,并且只想拥有匹配类型以进行反序列化,那么在编辑菜单中有一个名为“paste Special”的功能。 您只需要将 json 或 xml 放在剪贴板中,vs2015 就会为您生成类。

【讨论】:

    猜你喜欢
    • 2020-12-10
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多