Wcf 在序列化期间展平集合

Wcf 在序列化期间展平集合,wcf,serialization,Wcf,Serialization,我正在尝试将“集合集合”转换为外观更好的xml。基本上,我想对服务消费者撒谎,让它看起来像是一个真实的对象 这是WCF自动创建的 <EntityPropertyCollection xmlns="http://schemas.datacontract.org/2004/07/CustomSerializer" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <EntityProperty> <Name&

我正在尝试将“集合集合”转换为外观更好的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>

测验
测试2
嵌套1
嵌套2
这就是我想要实现的目标

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

为特定类型(EntityPropertyCollection)定制序列化程序会很好,但其他帖子指出这不是一个选项


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

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

我尝试过了。正如您所说,它适用于Xml。不过,我找不到REST服务的JSON等价物。不幸的是,DataContractSerializer已被密封。我想我又开始使用代孕了;生成一个类型并让序列化程序像通常那样工作。感谢WCF REST初学者工具包中的帮助检查。其中有一个名为Microsoft.Http和Microsoft.Http.Extensions的库。中有一些Json序列化程序和反序列化程序。您应该能够使用它们生成JSON流。这些类是为在客户端上使用而设计的,但是它们在服务器上也同样适用。谢谢你的建议。我今天没能做这个。当我回来的时候,我会告诉你事情的进展。