2013-06-04 6 views
1

Я использую Json.NET десериализации следующий JSON:Свойства разобранного объекта JSON нулевые

[ 
    { 
     "id": 1234, 
     "name": "Example", 
     "coords": "[12:34]", 
     "relationship": "ownCity" 
    }, 
    { 
     "id": 53, 
     "name": "Another example", 
     "coords": "[98:76]", 
     "relationship": "ownCity" 
    } 
] 

Я пытаюсь разобрать его в список.

List<City> cities = JsonConvert.DeserializeObject<List<City>>(json); 

Definiton класса Город:

public class City 
{ 
    int id { get; set; } 
    string name { get; set; } 
    string coords { get; set; } 
    string relationship { get; set; } 
} 

Результатом является список из двух объектов города, но все их свойства равны нулю (идентификатор 0).

Может ли кто-нибудь дать мне понять, что я делаю неправильно? Заранее спасибо.

+0

Точно так же вы знаете, идентификатор 0, так как целое значение по умолчанию 0, где, поскольку строка является ссылочным типом, они будут нулевыми. –

ответ

3

Все ваши поля отмечены (по умолчанию) как закрытые. Изменение их общественного или защищены, и он должен работать нормально:

public class City 
{ 
    public int id { get; set; } 
    public string name { get; set; } 
    public string coords { get; set; } 
    public string relationship { get; set; } 
} 
+0

О боже, я тупой. Спасибо! – nXu

1

Он будет работать для вас

  • Вам нужно добавить уровня общественного доступа

Уровень доступа к членам класса и члены структуры, включая вложенные классы и структуры, по умолчанию являются закрытыми.

  • Или Вам нужно DataContractAttribute к классу и атрибут DataMemberAttribute членам, которые вы хотите сериализовать. Как без [DataMember], вы не можете сериализовать непубличные свойства или поля

[DataContract] общественного класса Город {

[DataMember] 
public int id { get; set; } 

    [DataMember] 
    public string name { get; set; } 

    [DataMember] 
    public string coords { get; set; } 

    [DataMember] 
    public string relationship { get; set; } 
} 
Смежные вопросы