在序列化期间展平集合

时间:2010-02-08 17:22:59

标签: wcf serialization

我正在尝试将“集合集合”转换为更好看的xml。基本上,我想欺骗服务消费者,让它看起来像是一个真实的对象。

这是WCF自动创建的

<EntityPropertyCollection xmlns="http://schemas.datacontract.org/2004/07/CustomSerializer" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
 <EntityProperty>
  <Name>Test</Name>
  <Value i:nil="true"/>
 </EntityProperty>
 <EntityProperty>
  <Name>Test2</Name>
  <Value i:type="EntityPropertyCollection">
   <EntityProperty>
    <Name>Nested1</Name>
    <Value i:nil="true"/>
   </EntityProperty>
   <EntityProperty>
    <Name>Nested2</Name>
    <Value i:nil="true"/>
   </EntityProperty>
  </Value>
 </EntityProperty>
</EntityPropertyCollection>

这是我想要实现的目标

<Something>
 <Test i:nil="true"/>
 <Test2 i:type="Something">
  <Nested1 i:nil="true"/>
  <Nested2 i:nil="true"/>
 </Test2>
</Something>

特定类型的自定义序列化程序(EntityProperyCollection)会很好,但其他帖子表明这不是一个选项。

我查看了Data Contract Surrogates。我想我可以生成一个自定义类型,并允许DataContractSerializer序列化生成的类型。但是,我希望有一个更简单的解决方案。

1 个答案:

答案 0 :(得分:0)

您可以在返回对象上实现IXmlSerializable并手动执行序列化,或者只返回流并使用XmlWriter创建您想要的XML。