1

我继承了一些具有大量属性的类。我希望能够将它们序列化为WCF.

作为DataContractSerializer一个可选的序列化程序,我需要用属性装饰所有DataMember属性,这在我看来有点麻烦。难道我没有任何其他方法可以让我不必添加DataMember到所有属性吗?

请注意,我的大部分属性都需要序列化。

4

4 回答 4

0

[DataContract]您可以简单地不使用任何常见的序列化属性(即/ )标记您的类,[Serializable]并确保要序列化的所有属性都是公共的get,并且set. 如果要排除某个属性,则需要使用[IgnoreDataMember]属性对其进行标记。

例子:

public class Hamster
{
    public string Name { get; set; }
    [IgnoreDataMember]
    public int Age { get; set; }
}

来自MSDN 上的可序列化类型

您可以应用 DataContractAttribute 和 DataMemberAttribute 属性...但是,即使是没有用这些属性标记的类型也会被序列化和反序列化。以下规则和例外适用: ...
所有公共字段以及具有公共 get 和 set 方法的属性都将被序列化,除非您将 IgnoreDataMemberAttribute 特性应用于该成员。

于 2014-06-27T01:27:04.933 回答
0

这取决于您的属性是否可以自动生成 - 如果可以,您可以简单地替换 WCF 序列化程序。通常这样做是为了使用 JSON.NET:

C# WCF REST - 如何使用 JSON.Net 序列化程序而不是默认的 DataContractSerializer?

于 2013-11-13T21:54:33.657 回答
0

这就是它的设计方式,如这里 MSDN 链接所示。另一种选择是使用 XmlSerializer 序列化所有公共字段/属性。最终,您必须权衡考虑 DataContractSerializer 与其他方法的利弊。

于 2013-11-13T23:04:35.950 回答
0

dotnet 4.0及更高版本,

您可以避免使用该[DataContract]属性来制作所有public数据成员serializable

于 2015-09-28T06:38:36.213 回答