2015-04-22 2 views
3

Это сводит меня с ума ... Я сериализую список для JSON, используя Json.net. Я ожидаю, что этот JSON:JSON.NET: как сериализовать вложенные коллекции

{ 
    "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.

+2

Позволяет увидеть определение объекта для объекта вы сериализации. – OneHoopyFrood

+2

http://json2csharp.com/ Go wild –

ответ

7

Для этого ответа, вам нужна эта классовая структура

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

Это очень близко, за исключением того, что я возвращаю что-то странное в массиве свойств ... Он выводит дважды, один раз с «свойствами» и один раз с «Свойства»: – rjbullock

+0

Nevermind ... У меня был атрибут JsonProperty в неправильном месте ... Это работает! СПАСИБО БОЛЬШОЕ!!! Проводил почти весь день, пытаясь понять это правильно. : -/ – rjbullock

+0

Рад, что я смог помочь :) –

0

Это может быть ответом:

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

Вы только что опубликовали сообщение json2csharp.com? – OneHoopyFrood

+0

Ну, с одной стороны, вы не можете использовать по умолчанию get/set в списке , но это начало. – rjbullock

+0

ahhaha благодарит @rjbullock, но все тот же. – xsami