C# 使用WCF序列化时对集合使用其他类型

C# 使用WCF序列化时对集合使用其他类型,c#,.net,wcf,serialization,C#,.net,Wcf,Serialization,假设我有一个在OO模型中有意义的数据对象,但对于序列化,我希望用一个ID替换引用其他类型的字段,或者在某些情况下,用一个文本和ID替换一个简单对象 是否有可能让序列化程序以不同的方式处理特定字段,或者我必须从头开始用简化字段重新定义第二个数据对象类并使用它 例如: Person Guid Id string Name List<Person> Siblings 人 Guid Id 字符串名 列出兄弟姐妹 我想要序列化的内容: Person Guid Id st

假设我有一个在OO模型中有意义的数据对象,但对于序列化,我希望用一个ID替换引用其他类型的字段,或者在某些情况下,用一个文本和ID替换一个简单对象

是否有可能让序列化程序以不同的方式处理特定字段,或者我必须从头开始用简化字段重新定义第二个数据对象类并使用它

例如:

Person
  Guid Id
  string Name
  List<Person> Siblings
人
Guid Id
字符串名
列出兄弟姐妹
我想要序列化的内容:

Person
  Guid Id
  string Name
  List<Guid> Siblings
人
Guid Id
字符串名
列出兄弟姐妹
我只希望有一个类,
Person
,并为我的服务定义序列化行为(最好不要在数据类型级别,因为它可以序列化为XML或JSON)


我知道WCF中对引用的支持,但在这种情况下,我将引用结果集中其他地方未包含的其他类型;我只想包括他们的ID。

一旦更改了传输信息的结构,数据传输对象可能是最干净、最简单的选择

事实上,我总是建议为WCF服务创建专用DTO,将服务及其传输的数据与我通常使用的域模型分开。单独管理模型和服务的更改会带来开销,但与将域对象强制设置为服务的正确形状,然后尝试将其保持在该形状相比,工作量要小得多。

您可以通过序列化
兄弟
属性并添加只读
兄弟guids

Person
  Guid Id
  string Name
  [NonSerialized]
  List<Person> Siblings
  List<Guid> SiblingGuids // Only a getter which will expose guids
人
Guid Id
字符串名
[非串行化]
列出兄弟姐妹
列出同级GUID//仅列出将公开GUID的getter

我明白了。我不想强迫我的域对象符合我的WCF服务,但我希望它们完全不受任何与服务相关的影响。我想要的是一种“继承”域对象结构的方法,只是以不同的方式处理一些特定的情况(引用列表),这样我就不会得到那么多的开销。我认为我对这个问题理解得不够。你能做些什么来澄清你的问题吗?嗯。。。我想做我想做的事情的唯一方法是让序列化程序为集合中的每个项调用回调。回调将返回一个只包含我想要的值的对象,该对象被序列化并放入序列化集合中。因此,基本上,对于
兄弟
集合,序列化程序将为每个
个人
实例调用回调,而回调将返回一个
Guid
值。这样我就不需要额外的类了,我得到了我想要的序列化结构。WCF是否可以实现这一点?即使这个解决方案不理想,我也会使用它(通常我不希望让属性在检索时返回需要创建对象的值—在本例中是一个
列表
)。