未使用DataContractSerializer从XML根目录中删除命名空间

时间:2012-09-28 20:42:40

标签: .net xml namespaces xml-serialization datacontractserializer

有没有人知道为什么在datacontractserialization期间命名空间仍然被添加到根目录?

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);
      }
  });

1 个答案:

答案 0 :(得分:2)

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

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