【发布时间】:2012-04-23 16:19:20
【问题描述】:
我有一个类实际上是一个基于对象的枚举。该类公开了一组静态对象,并且所有内容都使用这些相同的实例。例如(注意私有构造函数)
[DataContract]
public class FieldType
{
public static readonly FieldType Default = new FieldType(1, "Default");
public static readonly FieldType Name = new FieldType(2, "Name");
public static readonly FieldType Etc = new FieldType(3, "Etc");
private FieldType(uint id, string name)
{
Id = id;
Name = name;
}
[DataMember] public uint Id { get; private set; }
[DataMember] public string Name { get; private set; }
//snip other properties
}
在我必须跨 WCF 序列化之前,这很有效。 DataContractSerializer 通过绕过构造函数创建新对象。这会产生一个有效的FieldType 对象,但它是一个新实例,不是我的静态实例之一。这会导致与已知静态值的引用比较失败。
有什么方法可以覆盖类的序列化行为,以便我创建对象实例而不是填充提供给我的实例?
【问题讨论】:
-
(注意
Name用于静态和非静态,意思是:它不会按原样编译) -
糟糕,是的。我对这个问题进行了清理并选择了一个坏名字。
标签: c# wcf serialization immutability datacontractserializer