【问题标题】:WCF REST: Is it possible to remove the namespace added to my response XML?WCF REST:是否可以删除添加到我的响应 XML 的命名空间?
【发布时间】:2010-03-26 20:12:09
【问题描述】:

我想删除添加到我的服务响应中的默认 xmlns(命名空间)(见下图)

有没有办法做到这一点?这是因为为了从 C# windows 应用程序使用此服务,我必须将命名空间添加到每个数据对象的标头 - 我将序列化的 DataContract。

【问题讨论】:

    标签: wcf rest namespaces


    【解决方案1】:

    我想如果你只是使用

    [DataContract(Namespace="")]
    

    Bookmarks 类上,应该这样做。


    我刚刚试了一下,得到了以下结果:

    <CompositeType xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
      <BoolValue>true</BoolValue>
      <StringValue>Hello </StringValue>
    </CompositeType>
    

    【讨论】:

    • Bookmarks (CollectionDataContract) 是根命名空间时不会这样做。并且添加 [DataContract] 要求每个属性都有一个 [DataMember] 属性。
    • @Tawani:是的,这是推荐的做法:用 [DataContract] 明确标记你的类,用 [DataMember] 明确标记你的所有成员。 WCF 试图鼓励这种明确的编码风格——这样你的意图会更清晰,阅读你的代码的其他人会更快、更容易地理解你想要做什么。拥抱它!
    • @marc_s:我不介意用 [DataContract] 标记所有类。我只想摆脱响应中的根命名空间。这样我的客户就不需要为每个对象显式添加一个命名空间。
    • @Tawani:使用命名空间确实是一种最佳实践。但是,您应该使用自己的一个,而不是让它默认。如果您的某些客户端将与其他 XML 一起从您的服务中操作 XML,则命名空间尤其重要。例如,如果您的服务有一个“Book”元素,另一个服务也有,并且它们都希望合并到一个文档中,则可能会出现命名冲突。您不向您的客户提供描述您的 XML 的 XML 模式吗?这也会告诉他们命名空间。
    • @John Saunders:我明白你的意思,但这仍然没有任何意义,因为我们的客户只需要解析数据而不是将其与其他数据合并。除了 JSON 客户端没有命名空间问题。
    【解决方案2】:

    实际上,WCF REST Contrib 被证明是使用他们的 PoxDataContract 的完美解决方案。

    【讨论】:

    • 我对这个库很感兴趣,但是是否有可用于 Xamarin 的 .NET Standard / PCL 版本?
    【解决方案3】:

    扩展@Tawani 的answer,如果您想支持属性或自定义XML 序列化,您可以通过创建自定义IWebFormatter 轻松扩展WcfRestContrib。这是我的answer 到一个类似的问题,解释了如何使用 XmlSerializer 执行此操作。

    【讨论】:

      猜你喜欢
      • 2010-10-03
      • 1970-01-01
      • 1970-01-01
      • 2015-01-25
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多