C# 使用Xsd验证序列化WCF代理类中的Xml时缺少架构错误

C# 使用Xsd验证序列化WCF代理类中的Xml时缺少架构错误,c#,.net,wcf,xml-serialization,C#,.net,Wcf,Xml Serialization,我正在尝试使用Xsd验证序列化的WCF代理类。 我注意到生成的Xml不包括父元素上的名称空间,但子元素有名称空间。这意味着我的验证抛出无法找到元素类型错误的架构信息 如果我手动添加一个默认名称空间,那么模式验证就会起作用。 我的问题是,如果请求对象具有名称空间的序列化属性,为什么不自动生成该属性 以下是我为代理生成序列化Xml的方式: var path = @"C:\DataRequest.xml"; var data = new DataRequest(); using (var fileW

我正在尝试使用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>

1.
以下是具有命名空间序列化属性的请求对象:

[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 {
[System.CodeDom.Compiler.GeneratedCodeAttribute(“System.Xml”,“4.0.30319.17929”)]
[System.Xml.Serialization.XmlTypeAttribute(Namespace=“urn:some:name:space”)]
公共部分类DataRequest:对象,System.ComponentModel.INotifyPropertyChanged{

我发现,在使用XmlSerializer时,要在根目录中获取名称空间,需要将应用程序应用于目标类。

我通过在序列化时动态获取名称空间值来修复此问题

以下是修改后的函数:

var dataType = data.GetType();
var xmlAttribute = (XmlTypeAttribute)Attribute.GetCustomAttribute(dataType, typeof(XmlTypeAttribute));
XNamespace ns = xmlAttribute.Namespace;
using (var fileWriter = new StreamWriter(filePath))
{
   var xSerializer = new XmlSerializer(dataType, ns.NamespaceName);
   xSerializer.Serialize(fileWriter, data);
   fileWriter.Close();    
}

代码来自于这样的答案:

我的代理类是从wsdl自动生成的吗?