【问题标题】:XmlTypeAttribute works only on attributes in classXmlTypeAttribute 仅适用于类中的属性
【发布时间】:2014-10-23 13:41:21
【问题描述】:

我正在尝试使用 webservice 将其解析为 XML:

[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.xx.com/zz/Domain")]
Public class A 
{
   public int element1;
   public int 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</element1>
 <element2>1</element1>
</A>

【问题讨论】:

    标签: c# xml wcf


    【解决方案1】:

    改用XmlRoot 属性:

    [XmlRoot( Namespace = "http://www.xx.com/zz/Domain")>
    Public class A 
    {
        public int element1;
        public int element2;
    }
    

    编辑:关于您的评论,您能提供您的序列化方法吗?我认为可能有以下原因:

    [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();
        }
    }
    

    输出预期结果:

    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>
    

    【讨论】:

    • @TobiasOlofsson 你能再检查一次吗,我确认答案有效。请查看添加的代码
    • @TobiasOlofsson 你有机会看吗?我很想知道您是否还有问题
    猜你喜欢
    • 2011-05-14
    • 2020-11-21
    • 1970-01-01
    • 1970-01-01
    • 2020-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-22
    相关资源
    最近更新 更多