【发布时间】:2011-07-17 07:45:03
【问题描述】:
我遇到了类设计问题。
我正在使用数据合约序列化程序。
所以,在我的所有应用程序共享的程序集中,我有这样的东西:
// Assembly DataContracts.dll: .NET 3.0, used by every subsystems
[DataContract]
public class User
{
/// <summary>Nickname.</summary>
[DataMember]
public string displayName;
}
还有更多字段:我只留下了 displayName 试图压缩我的代码清单。
但是,其中一个应用程序是服务器,它需要另一个序列化程序才能应用于同一类,方式如下:
// Assembly ServerDatabase.dll, .NET 4.0, used only by server.
[EseTable]
public class User
{
/// <summary>Nickname.</summary>
[EseText(bUnicode=true, maxChars=71)]
public string displayName;
}
ServerDatabase.dll 链接到 .NET 4。此外,[Ese*] 属性定义在一个 DLL 中,由于我无法控制的安全原因,该 DLL 只能由服务器组件加载,所以我不能只是有一个类,每个子系统共享两组属性。
目前,我写的是这样的:
// DataContracts.dll
[DataContract]
public class User
{
[DataMember]
public string displayName;
}
// ServerDatabase.dll
[EseTable]
public class UserRecord: User
{
[EseText(bUnicode=true, maxChars=71)]
new public string displayName { get { return base.displayName; } set { base.displayName=value; } }
// Note I need to implement an upcasting copy constructor, to convert from User to UserRecord :-(
public UserRecord(User that)
{
base.displayName=that.displayName;
}
}
我不太喜欢我的解决方案:看起来像 hack,而且容易出错。 有什么不同的更好的想法、更正或修复吗?
提前致谢!
【问题讨论】:
-
次要,但公共领域:不是一个好主意。
标签: c# serialization .net-3.5 .net-4.0 custom-attributes