我正在尝试使用 Xsd 验证序列化的 WCF 代理类。
我注意到生成的 Xml 不包括父元素上的命名空间,但子元素有它。这意味着我的验证抛出找不到元素类型错误的架构信息。
如果我手动添加默认命名空间,则架构验证有效。
我的问题是,如果请求对象具有命名空间的序列化属性,为什么不自动生成呢?
这就是我为代理生成序列化 Xml 的方式:
var path = @"C:\DataRequest.xml";
var data = new DataRequest();
using (var fileWriter = new StreamWriter(path))
{
var serializer = new XmlSerializer(data.GetType());
serializer.Serialize(fileWriter, data);
fileWriter.Close();
}
这将生成以下 DataRequest.xml:
<DataRequest>
<Data xmlns="urn:some:name:space">
<Id>1</Id>
</Data>
</DataRequest>
这是我的带有命名空间序列化属性的请求对象:
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.17929")]
<other attributes I snipped>
[System.Xml.Serialization.XmlTypeAttribute(Namespace="urn:some:name:space")]
public partial class DataRequest : object, System.ComponentModel.INotifyPropertyChanged {