JavaScriptSerializer: невозможно десериализовать JSON, который использует символ @ в имени свойства

Я использую сторонний сервер, который предоставляет API через REST (поэтому невозможно изменить JSON). JSON, который он возвращает, имеет следующий формат:

    [
         {
              "@noun":"tag",
              "@version":0,
              "@tag":"myFoo"
         }
    ]

Я создал объект С# для представления этого элемента

    public class ResponseItem
    {
        public string noun {get;set;}
        .....
    }

однако, когда я пытаюсь использовать JavaScriptSerializer для десериализации этого объекта, свойства НЕ назначаются. Сериализатор, похоже, не может обрабатывать свойства с символом @ перед именем.

Любые идеи о том, как решить эту проблему?


person Keith    schedule 04.03.2013    source источник
comment
Вы говорите, что не можете изменить источник JSON, но не могли бы вы отфильтровать текст JSON перед его десериализацией?   -  person David R Tribble    schedule 04.03.2013


Ответы (1)


Итак, немного повозившись, я отказался от JavaScriptSerializer. Я переключился на DataContractJsonSerializer. Затем я использую четко определенные контракты данных и использую атрибут DataMember для указания имени.

i.e.

[DataContract]
public class ResponseItem
{
    [DataMember(Name="@noun")]
    public string Noun {get;set;}
    ....
}

Может быть лучший/другой способ, но это работает и является приемлемым решением.

person Keith    schedule 05.03.2013