我需要将一些以 JSON 表示的 JavaScript 对象反序列化为适当的 C# 类。鉴于自动属性的良好特性,我更愿意将它们放在这些类中,而不是仅仅拥有字段。不幸的是,.NET 序列化引擎(至少在默认情况下)完全忽略了反序列化的自动属性,只关心支持字段,这显然不存在于 JavaScript 对象中。
鉴于没有命名支持字段的标准方法,老实说,我什至不想打扰“让我们创建一个看起来像它具有 C# 支持字段的 JavaScript 对象”方法,因为这听起来有点脏,这是唯一的方法如果我可以强制序列化引擎以某种方式忽略支持字段并直接使用该属性,我可以将 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
找不到所需的数据成员‘’。”