【问题标题】:Namespace Not Being Removed From XML Root with DataContractSerializer没有使用 DataContractSerializer 从 XML 根目录中删除命名空间
【发布时间】:2012-09-20 18:13:16
【问题描述】:

有谁知道为什么在数据合同序列化期间命名空间仍被添加到根目录?

XML

<Response xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <Event>
    <Address>
      .
      .
      .
</Response>

代码:

[DataContract(Name = "Response", Namespace = "")]
public class ApiEventResponse
{
    [DataMember(EmitDefaultValue = false)]
    public ApiEvent Event { get; set; }
}

var serializer = new DataContractSerializer(type, "Response", "");

return Task.Factory.StartNew(() =>
  {
      using (var xmlw = new XmlTextWriter(writeStream, Encoding))
      {
          xmlw.Formatting = Formatting.Indented;
          serializer.WriteObject(xmlw, value);
      }
  });

【问题讨论】:

  • 请注意,这只是似乎没有使用的命名空间定义(至少在您粘贴的 xml 文档的部分中)。您的元素实际上位于空命名空间中。
  • 如果我有一个 NULL 元素就是这种情况,它会添加 i:nill="true"
  • 然后声明将被要求和使用(但不一定在根元素上)。

标签: .net xml namespaces xml-serialization datacontractserializer


【解决方案1】:

无论使用什么数据协定或实际命名空间,XMLSchema-instance 命名空间似乎都已发出。 XMLSchema-instance 命名空间前缀实际上并未在您的示例中使用,它只是被声明了。

序列化程序可能只是始终发出该命名空间,以防它以后发现需要在序列化数据时引用 XMLSchema 的情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    • 2020-08-30
    • 2010-11-17
    • 2016-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多