C# JSON.NET:如何序列化嵌套集合

C# JSON.NET:如何序列化嵌套集合,c#,json.net,C#,Json.net,这让我快发疯了。。。我正在使用JSON.net将列表序列化为JSON。我希望这个JSON: { "fieldsets": [ { "properties": [ { "alias": "date", "value": "2014-02-12T00:00:00" }, {

这让我快发疯了。。。我正在使用JSON.net将列表序列化为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
        }
    ]
}

我想要的“values”集合只是一个JSON数组,但我一辈子都不知道如何让它做到这一点。我在我的“属性”对象上有一个名为“值”的属性,所以我理解它为什么这样做,但我只需要一个直接数组,而不是一个JSON对象。

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

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; }
}

这可能就是答案:

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; }
}
公共类属性
{
公共字符串别名{get;set;}
公共字符串值{get;set;}
}
公共类字段集
{
公共列表属性{get;set;}
公共字符串别名{get;set;}
公共bool已禁用{get;set;}
}
公共类根对象
{
公共列表字段集{get;set;}
}

您可以转换为作业对象:

JObject jsonObject = JObject.Parse(myJsonString);
按键导航:

jsonObject["property"]["value"];//Property is value / object
jsonObject["value"];
按索引导航:

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

让我们看看要序列化的对象的对象定义。你刚刚发布了json2csharp.com给你的东西吗?首先,你不能在列表中使用默认的get/set,但这只是一个开始。这非常接近,除了我在“属性”数组中得到了一些奇怪的东西。。。它输出两次,一次使用“属性”,一次使用“属性”:无需担心。。。我在错误的位置有一个JsonProperty属性。。。这管用!非常感谢你!!!几乎花了一整天的时间试图把这件事做好-/很高兴我能帮忙:)