1

有谁知道为什么在datacontractserialization期间命名空间仍然被添加到根目录中?命名空间没有从DataContractSerializer的XML根目录中删除

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

请注意,这只是名称空间定义,似乎并未使用(至少在您粘贴的xml文档的某些部分中)。你的元素实际上是在空的名字空间中。 – Pawel

+0

如果我有一个NULL元素,情况就是这样,它会添加i:nill =“true” –

+0

然后声明将被需要和使用(不一定在根元素上)。 – Pawel

回答

2

XMLSchema的实例命名空间似乎不管使用什么样的数据合同或实际的命名空间发射。 XMLSchema实例名称空间前缀在您的示例中并未实际使用,只是声明了它。

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

相关问题