Мне нужно десериализовать некоторый объект JavaScript, представленный в JSON, в соответствующий класс С#. Учитывая хорошие функции автоматических свойств, я предпочел бы иметь их в этих классах, а не просто иметь поля. К сожалению,.NET Сериализация двигатель (по крайней мере, по умолчанию) полностью игнорирует автоматические свойства на десериализации и заботится только о поле подложки, которая, очевидно, не присутствует в объекте JavaScript.
Учитывая, что нет стандартного способа для имени полей поддержки, и, честно говоря, я даже не хочу беспокоиться о том," пусть создайте объект JavaScript, который выглядит он использовал поля поддержки С#, поскольку это звучит немного грязно, единственный способ, которым я мог бы сериализовать поля JavaScript в свойствах С#, если бы я мог заставить механизм сериализации каким-то образом игнорировать поле поддержки и использовать свойство напрямую. К сожалению, я не могу понять, как это делается, или если это вообще можно сделать. Любые идеи будут оценены.
EDIT. Здесь приведен пример:
JavaScript:
function Cat()
{
this.Name = "Whiskers";
this.Breed = "Tabby";
}
var cat = new Cat();
Затем сериализуется "{Name:" Whiskers "}.
Класс С#:
[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
' не были найдено".