【问题标题】:Flatten a collection during serialization在序列化期间展平集合
【发布时间】:2010-02-08 17:22:59
【问题描述】:

我正在尝试将“集合集合”转换为更好看的 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) 的自定义序列化器会很好,但其他帖子表明这不是一个选项。

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

【问题讨论】:

    标签: wcf serialization


    【解决方案1】:

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

    【讨论】:

    • 我试过了。正如你所说,它适用于 Xml。不过,我找不到 REST 服务的 JSON 等价物。不幸的是,DataContractSerializer 是密封的。我想我又开始使用代理了;生成一个类型并让序列化程序像往常一样工作。感谢您的帮助
    • 签入 WCF REST Starter Kit。其中有一个名为 Microsoft.Http 和 Microsoft.Http.Extensions 的库。里面有一些 Json 序列化器和反序列化器。您应该能够使用它们来生成 JSON 流。这些类旨在用于客户端,但它们在服务器上也同样有效。
    • 感谢您的建议。我今天无法解决这个问题。当我回到它时,我会让你知道它是怎么回事。
    猜你喜欢
    • 2017-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-10
    相关资源
    最近更新 更多