【问题标题】:JSON.NET: How to Serialize Nested CollectionsJSON.NET:如何序列化嵌套集合
【发布时间】:2015-04-22 21:00:36
【问题描述】:

这让我发疯......我正在使用 Json.net 将 List 序列化为 JSON。我期待这个 JSON:

{
    "fieldsets": [
        {
            "properties": [
                {
                    "alias": "date",
                    "value": "2014-02-12T00:00:00"
                },
                {
                    "alias": "time",
                    "value": null
                }
            ],
            "alias": "eventDates",
            "disabled": false
        }
    ]
}

但是我得到了这个:

{
    "fieldsets": [
        {
            "properties": [
                {
                    "values": [
                        {
                            "alias": "date",
                            "value": "2014-07-13T00:00:00"
                        },
                        {
                            "alias": "time",
                            "value": "Registration begins at 8:00 AM; walk begins at 9:00 AM"
                        }
                    ]
                }
            ],
            "alias": "eventDates",
            "disabled": false
        }
    ]
}

我希望将“值”集合作为一个 JSON 数组,但我终其一生都无法弄清楚如何让它做到这一点。我的“属性”对象上有一个名为“值”的属性,所以我理解它为什么这样做,但我只需要直接数组,而不是 JSON 对象。

【问题讨论】:

  • 让我们看看你正在序列化的对象的对象定义。

标签: c# json.net


【解决方案1】:

对于那个响应,你需要这个类结构

public class Property
{
    [JsonProperty("alias")]
    public string Alias { get; set; }

    [JsonProperty("value")]
    public string Value { get; set; }
}

public class Fieldset
{
    [JsonProperty("properties")]
    public Property[] Properties { get; set; }

    [JsonProperty("alias")]
    public string Alias { get; set; }

    [JsonProperty("disabled")]
    public bool Disabled { get; set; }
}

public class Response
{
    [JsonProperty("fieldsets")]
    public Fieldset[] Fieldsets { get; set; }
}

【讨论】:

  • 这非常接近,除了我在“properties”数组上得到了一些奇怪的东西......它输出了两次,一次是“properties”,一次是“Properties”:
  • 没关系...我在错误的地方有一个 JsonProperty 属性...这有效!太感谢了!!!几乎一整天都在努力解决这个问题。 :-/
  • 很高兴我能帮上忙 :)
【解决方案2】:

你可以转换成JObject:

JObject jsonObject = JObject.Parse(myJsonString);

按键导航:

jsonObject["property"]["value"];//Property is value / object
jsonObject["value"];

按索引导航:

jsonObject[0]["value"]; // Property is array / list
jsonObject[0];

【讨论】:

    【解决方案3】:

    这可能是答案:

    public class Property
    {
        public string alias { get; set; }
        public string value { get; set; }
    }
    
    public class Fieldset
    {
        public List<Property> properties { get; set; }
        public string alias { get; set; }
        public bool disabled { get; set; }
    }
    
    public class RootObject
    {
        public List<Fieldset> fieldsets { get; set; }
    }
    

    【讨论】:

    • 你刚刚发布了 json2csharp.com 给你的东西吗?
    • 好吧,一方面你不能在 List 上使用默认的 get/set,但这是一个开始。
    猜你喜欢
    • 2019-01-29
    • 1970-01-01
    • 2014-02-19
    • 2011-09-18
    • 1970-01-01
    • 2016-01-17
    • 2014-07-02
    • 2013-08-30
    相关资源
    最近更新 更多