Мне нужно десериализовать некоторый объект JavaScript, представленный в JSON, в соответствующий класс C #. Учитывая приятные возможности автоматических свойств, я бы предпочел иметь их в этих классах, а не просто иметь поля. К сожалению, механизм сериализации .NET (по крайней мере, по умолчанию) полностью игнорирует автоматические свойства при десериализации и заботится только о поле поддержки, которое явно отсутствует в объекте JavaScript.
Учитывая, что не существует стандартного способа именования вспомогательных полей , и, честно говоря, я даже не хочу беспокоиться о том, что "давайте создадим объект JavaScript, который выглядит так, как будто он имеет вспомогательные поля C #", как это звучит немного грязно, единственный способ, которым я мог бы сериализовать поля JavaScript в авто-свойства C #, если бы я мог заставить механизм сериализации как-то игнорировать поле поддержки и использовать свойство напрямую. К сожалению, я не могу понять, как это делается или вообще можно ли это сделать. Любые идеи будут оценены.
РЕДАКТИРОВАТЬ : Вот пример:
Javascript:
function Cat()
{
this.Name = "Whiskers";
this.Breed = "Tabby";
}
var cat = new Cat();
Затем он сериализуется в "{Name: 'Whiskers'}".
Класс C #:
[Serializable()]
public class Cat
{
public string Name { get; set; }
public string Breed { get; set; }
}
И код десериализации, который терпит неудачу:
new DataContractJsonSerializer(typeof(Cat)).ReadObject(inputStream);
И из исключения видно, что он терпит неудачу, потому что ищет поле поддержки.
EDIT2 : Вот исключение, если это помогает (без внутренних исключений):
System.Runtime.Serialization.SerializationException
"Тип контракта данных 'Test.Cat'
не может быть десериализовано, потому что
обязательные члены данных
«<Name>k__BackingField, <Breed>k__BackingField
» не было
найден ".