XmlTypeAttribute仅适用于在类属性 [英] XmlTypeAttribute works only on attributes in class
本文介绍了XmlTypeAttribute仅适用于在类属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我试图解析这个使用XML Web服务:
[System.Xml.Serialization.XmlTypeAttribute(命名空间= http://www.xx.com/zz/Domain)]
公共A级
{
公众诠释中element1;
公众诠释element2的;
}
这给了
< A>
将;中element1 xlmns =http://www.xx.com/zz/Domain→1&下; /中element1>
将;在element2 xlmns =http://www.xx.com/zz/Domain→1&下; /中element1>
< / A>
我应该使用,而不是XmlTypeAttribute得到什么
< A xlmns =http://www.xx.com/zz/Domain>
<中element1> 1 LT; / - 中element1 GT;
<在element2> 1 LT; / - 中element1 GT;
< / A>
解决方案
使用的 XmlRoot
属性来代替:
[XmlRoot(命名空间=http://www.xx.com/zz/Domain )>
公共A级
{
公众诠释中element1;
公众诠释element2的;
}
编辑:关于你的评论,你能给你的序列化方法?我觉得有可能是因为下面的内容有:
[XmlRoot(命名空间=http://www.xx.com / ZZ /域)]
公共类RootA
{
公众诠释中element1;
公众诠释element2的;
}
[XmlType将(命名空间=http://www.xx.com/zz/Domain)]
公共类类型A
{
酒店的公共INT中element1;
公众诠释element2的;
}
内部类节目
{
私有静态无效的主要(字串[] args)
{
序列化<类型A>() ;
序列化< RootA>();
到Console.ReadLine();
}
公共静态无效的序列化< T>()其中T:新的()
{
Console.WriteLine();
Console.WriteLine();
无功序列化=新T();
System.Xml.Serialization.XmlSerializer X =新System.Xml.Serialization.XmlSerializer(serializable.GetType());
Console.WriteLine(serializable.GetType()名);
x.Serialize(Console.Out,序列化);
Console.WriteLine();
Console.WriteLine();
}
}
输出预期的结果:
类型A
< XML版本=1.0编码=ibm850>?;
<类型A的xmlns:XSI =http://www.w3.org/2001/XMLSchema-instance的xmlns:XSD =HTTP://W¯¯
ww.w3.org/2001/ XML模式>
将;中element1的xmlns =http://www.xx.com/zz/Domain大于0&下; /中element1>
<在element2的xmlns =http://www.xx.com/zz/Domain> 0℃; / element2的>
< /类型A>
RootA
< XML版本=1.0编码=ibm850>?;
< RootA的xmlns:XSI =http://www.w3.org/2001/XMLSchema-instance的xmlns:XSD =HTTP://W¯¯
ww.w3.org/2001/ XML模式的xmlns =http://www.xx.com/zz/Domain>
<&中element1 GT; 0℃; / - 中element1 GT;
<&element2的GT; 0℃; / element2的>
< / RootA>
I'm trying to parse this to XML using webservice:
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.xx.com/zz/Domain")]
Public class A
{
public int element1;
public int element2;
}
This gives
<A>
<element1 xlmns="http://www.xx.com/zz/Domain">1</element1>
<element2 xlmns="http://www.xx.com/zz/Domain">1</element1>
</A>
What should i use instead of XmlTypeAttribute to get
<A xlmns="http://www.xx.com/zz/Domain">
<element1>1</element1>
<element2>1</element1>
</A>
解决方案
Use the XmlRoot
attribute instead:
[XmlRoot( Namespace = "http://www.xx.com/zz/Domain")>
Public class A
{
public int element1;
public int element2;
}
EDIT: regarding your comment, could you give your serialization method? I think there may be something there since the following:
[XmlRoot(Namespace = "http://www.xx.com/zz/Domain")]
public class RootA
{
public int element1;
public int element2;
}
[XmlType(Namespace = "http://www.xx.com/zz/Domain")]
public class TypeA
{
public int element1;
public int element2;
}
internal class Program
{
private static void Main(string[] args)
{
Serialize<TypeA>();
Serialize<RootA>();
Console.ReadLine();
}
public static void Serialize<T>() where T : new()
{
Console.WriteLine();
Console.WriteLine();
var serializable = new T();
System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(serializable.GetType());
Console.WriteLine(serializable.GetType().Name);
x.Serialize(Console.Out, serializable);
Console.WriteLine();
Console.WriteLine();
}
}
outputs the expected result:
TypeA
<?xml version="1.0" encoding="ibm850"?>
<TypeA xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://w
ww.w3.org/2001/XMLSchema">
<element1 xmlns="http://www.xx.com/zz/Domain">0</element1>
<element2 xmlns="http://www.xx.com/zz/Domain">0</element2>
</TypeA>
RootA
<?xml version="1.0" encoding="ibm850"?>
<RootA xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://w
ww.w3.org/2001/XMLSchema" xmlns="http://www.xx.com/zz/Domain">
<element1>0</element1>
<element2>0</element2>
</RootA>
这篇关于XmlTypeAttribute仅适用于在类属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文