代码之家  ›  专栏  ›  技术社区  ›  jmservera

如何在WCF中透明地序列化数据集扩展属性?

  •  3
  • jmservera  · 技术社区  · 16 年前

    我们是 从远程处理迁移到WCF 一个非常大的应用程序,可以集中使用数据集。我们使用数据集表的扩展属性来存储一个对象图,其中包含我们在客户端需要的特殊信息。

    在远程处理实现中,我们确实向通道堆栈添加了一个客户机和一个服务器通道,以检查消息是否包含数据集,并使用XML序列化程序能够通过线发送扩展属性(您可能知道,数据集序列化程序对在扩展属性中找到的元素执行ToString())。

    我们这样做,所以它对业务规则和UI开发人员是透明的。

    在WCF通道将数据集序列化为XML/SOAP之前,我们应该重写或实现什么来管理数据集?有可能吗?

    注: 我已经知道我们必须避免在WCF中使用数据集,但是我们有200多个表单正在使用数据集,现在不能全部更改它们。

    多谢!

    3 回复  |  直到 16 年前
        1
  •  2
  •   Marc Gravell    16 年前

    我想知道您是否不能通过在每一端添加一个行为属性来交换序列化程序…给定一个 XmlReader / XmlWriter ,方法:

    dataset.WriteXml(xmlWriter, XmlWriteMode.WriteSchema);
    

    dataset.ReadXml(xmlReader, XmlReadMode.ReadSchema);
    

    似乎有效(即,扩展属性受到尊重),因此您应该能够编写检测 DataSet 交换到一个自定义序列化程序-像这样( attribute γ behaviour γ serializer )-但可能更简单。如果还不足以开始的话,我可以稍后再看一看……

        2
  •  1
  •   Alex Yakunin    16 年前

    您可以考虑切换到 NetDataContractSerializer .它能够序列化所有可序列化的.NET类型,甚至包括支持ISerializable的类型,并且它完全处理此类图中的循环。

    但是,只有在.NET客户端使用WCF服务时,这才有效。

        3
  •  1
  •   jmservera    16 年前

    首先,谢谢你的回答。我终于找到了如何将Marc的答案和 Nicholas Allen's Indigo Blog .

    谢谢您。

    推荐文章