Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用xml序列化程序将多个xml命名空间应用于同一个类_C#_Xml Serialization - Fatal编程技术网

C# 如何使用xml序列化程序将多个xml命名空间应用于同一个类

C# 如何使用xml序列化程序将多个xml命名空间应用于同一个类,c#,xml-serialization,C#,Xml Serialization,我试图用WCF生成一个代理类,当序列化时,它会将下面类的实例转换为下面的XML 但是,当我尝试将名称空间应用于类时,它们被错误地插入,或者根本没有插入 我做错了什么?我怎样才能解决这个问题 非常感谢 班级结构: [XmlRoot] public class Request { public int Id public Name Name {get;set;} } [XmlRoot] public class Name { [XmlAttribute] public bool

我试图用WCF生成一个代理类,当序列化时,它会将下面类的实例转换为下面的XML

但是,当我尝试将名称空间应用于类时,它们被错误地插入,或者根本没有插入

我做错了什么?我怎样才能解决这个问题

非常感谢

班级结构:

[XmlRoot]
public class Request
{
  public int Id

  public Name Name {get;set;}
}

[XmlRoot]
public class Name
{
  [XmlAttribute]
  public bool test {get;set;}

  public string FirstName {get;set;}

  public string LastName {get;set;}
}
<x1:Request xmlns:x1="Data/Main" xmlns:x2="Data/All">
  <x2:Id>0</x2:Id>
  <x2:Name test="true">
    <x2:FirstName>Dan</x2:FirstName>
    <x2:LastName>Atkinson</x2:LastName>
  </x2:Name>
</x1:Request>
所需的XML结构(多余的XML修剪):

[XmlRoot]
public class Request
{
  public int Id

  public Name Name {get;set;}
}

[XmlRoot]
public class Name
{
  [XmlAttribute]
  public bool test {get;set;}

  public string FirstName {get;set;}

  public string LastName {get;set;}
}
<x1:Request xmlns:x1="Data/Main" xmlns:x2="Data/All">
  <x2:Id>0</x2:Id>
  <x2:Name test="true">
    <x2:FirstName>Dan</x2:FirstName>
    <x2:LastName>Atkinson</x2:LastName>
  </x2:Name>
</x1:Request>

0
丹
阿特金森
如果您谈论的是(xml)属性(即
),那么您就不是在谈论
DataContractSerializer
——所以可能还是坚持使用
XmlType
等。。。比如:

[XmlRoot(Namespace="Data/Main")]
public class Request {
  [XmlElement(Namespace = "Data/All")]
  public int Id { get; set; }
  [XmlElement(Namespace="Data/All")]
  public Name Name {get;set;}
}

[XmlType(Namespace="Data/All")]
public class Name {
  [XmlAttribute("test")]
  public bool Test {get;set;}
  public string FirstName {get;set;}
  public string LastName {get;set;}
}
这没有别名-但它似乎是正确的,至少

将上面的属性与“Guard”的
XmlSerializerNamespaces
code合并,它应该在那里

(这里归功于“守卫”,但这毕竟是维基…)


马克,我在很多测试中都尝试过这个方法,问题是我发送消息的服务明确要求使用x1和x2别名,如果找不到,则会出现错误。@Marc:我将添加一个答案,澄清[Xml]属性!=[DataContract],但是如果您编辑正确的答案,这样说会更好。@Dan:您应该向该服务的创建者投诉,他们违反了XML标准。前缀在XML中并不重要。@Marc,您提到了“Guard”的XmlSerializerNamespaces代码。这是哪里?这是下面的代码吗?把最后一个擦掉,我已经整理好了。感谢马克和约翰的迅速回复!