Необязательные поля при чтении в JSON через DataContracts в C # - PullRequest
2 голосов
/ 20 декабря 2011

Я работаю с Twitter API, обращаюсь к нему через C # и DataContracts.

У меня проблемы с чтением в поле гео.Проблема в том, что иногда он содержит подполя, в то время как иногда он пуст:

"geo":{"coordinates":[52.5112,13.3577],"type":"Point"}

или

"geo":null

Я пытаюсь это сделать с помощью

[DataContract]
public class Geo
{
  [DataMember(Name = "coordinates")]
  public string Coordinates { get; set; }
}

я получаю следующую ошибку:

"Произошла ошибка при десериализации объекта типа Twitter.SearchResults. Ожидается конец элемента 'координаты' из пространства имен". Найден элемент "элемент" из пространства имен "". "

Похоже, синтаксический анализатор получил нулевое значение, но ожидал поле с координатами.Я понимаю, что сказал парсеру ожидать "координат", поэтому, конечно, он жалуется.Но я не знаю, как сделать это поле необязательным.

1 Ответ

4 голосов
/ 20 декабря 2011

Если я не ошибаюсь, все свойства / поля являются необязательными по умолчанию.Скорее всего, проблема в том, что координаты - это не строковое свойство, а массив чисел с плавающей запятой.

Итак, чтобы исправить это, попробуйте:

[DataContract]
public class Geo
{
    [DataMember(Name = "coordinates")]
    public double[] Coordinates { get; set; }
}
...