XmlTypeAttribute仅适用于在类属性 [英] XmlTypeAttribute works only on attributes in class

查看:195
本文介绍了XmlTypeAttribute仅适用于在类属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图解析这个使用XML Web服务:

  [System.Xml.Serialization.XmlTypeAttribute(命名空间= http://www.xx.com/zz/Domain)] 
公共A级
{
公众诠释中element1;
公众诠释element2的;
}

这给了



 < A> 
将;中element1 xlmns =htt​​p://www.xx.com/zz/Domain→1&下; /中element1>
将;在element2 xlmns =htt​​p://www.xx.com/zz/Domain→1&下; /中element1>
< / A>



我应该使用,而不是XmlTypeAttribute得到什么

 < A xlmns =htt​​p://www.xx.com/zz/Domain> 
<中element1> 1 LT; / - 中element1 GT;
<在element2> 1 LT; / - 中element1 GT;
< / A>


解决方案

使用的 XmlRoot 属性来代替:

  [XmlRoot(命名空间=htt​​p://www.xx.com/zz/Domain )> 
公共A级
{
公众诠释中element1;
公众诠释element2的;
}






编辑:关于你的评论,你能给你的序列化方法?我觉得有可能是因为下面的内容有:

  [XmlRoot(命名空间=htt​​p://www.xx.com / ZZ /域)] 
公共类RootA
{
公众诠释中element1;
公众诠释element2的;
}

[XmlType将(命名空间=htt​​p://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 =htt​​p://www.w3.org/2001/XMLSchema-instance的xmlns:XSD =HTTP://W¯¯
ww.w3.org/2001/ XML模式>
将;中element1的xmlns =htt​​p://www.xx.com/zz/Domain大于0&下; /中element1>
<在element2的xmlns =htt​​p://www.xx.com/zz/Domain> 0℃; / element2的>
< /类型A>



RootA
< XML版本=1.0编码=ibm850>?;
< RootA的xmlns:XSI =htt​​p://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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆