相关疑难解决方法(0)

C#自动对JSON进行反序列化

我需要将JSON中表示的一些JavaScript对象反序列化为适当的C#类.鉴于自动属性的优点,我宁愿在这些类中使用它们而不是只有字段.不幸的是,.NET序列化引擎(至少在默认情况下)完全忽略反序列化的自动属性,只关心支持字段,这显然不存在于JavaScript对象中.

鉴于没有标准的方法来命名支持字段,说实话,我甚至不想打扰"让我们创建一个看起来像C#支持字段的JavaScript对象"的方法,因为它听起来有点脏,唯一的方法如果我可以强制序列化引擎以某种方式忽略支持字段并直接使用属性,我可以将JavaScript字段序列化为C#auto-properties.不幸的是,我无法弄清楚这是如何完成的,或者是否可以完成.任何想法,将不胜感激.

编辑:这是一个例子:

使用Javascript:

function Cat()
{
    this.Name = "Whiskers";
    this.Breed = "Tabby";
}
var cat = new Cat();
Run Code Online (Sandbox Code Playgroud)

然后将其序列化为"{Name:'Whiskers'}".

C#类:

[Serializable()]
public class Cat
{
    public string Name { get; set; }
    public string Breed { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

而反序列化代码失败了:

new DataContractJsonSerializer(typeof(Cat)).ReadObject(inputStream);
Run Code Online (Sandbox Code Playgroud)

从例外情况可以看出它失败了,因为它正在寻找支持领域.

EDIT2:这是例外,如果有帮助(没有内部异常):

System.Runtime.Serialization.SerializationException

"数据合同类型'Test.Cat'无法反序列化,因为<Name>k__BackingField, <Breed>k__BackingField找不到所需的数据成员' ."

.net c# serialization json automatic-properties

50
推荐指数
3
解决办法
6万
查看次数

Serializable和DataContract(不是?)

我在新项目中阅读了一些代码,发现前开发人员正在使用Serializable和DataContract.

[Serializable]
Run Code Online (Sandbox Code Playgroud)

[DataContract(Namespace="Some.Name.Space", IsReference = true)]
Run Code Online (Sandbox Code Playgroud)

我假设当存在DataContract属性时,WCF将忽略Serializable.这是正确的假设吗?如果没有,同时使用两者有什么好处?

.net c# wcf web-services

11
推荐指数
1
解决办法
4510
查看次数