C# 如何使用xml序列化程序将多个xml命名空间应用于同一个类
我试图用WCF生成一个代理类,当序列化时,它会将下面类的实例转换为下面的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
[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代码。这是哪里?这是下面的代码吗?把最后一个擦掉,我已经整理好了。感谢马克和约翰的迅速回复!