代码之家  ›  专栏  ›  技术社区  ›  Yaakov Shoham

在DotNet XmlSerializer中将XML元素名称序列化为枚举

  •  1
  • Yaakov Shoham  · 技术社区  · 7 年前

    例子:

    <root>
                    <a>4</a>
                    <b>5</b>
                    <c>6</c>
    </root>
    
    [Serializable]
    public enum NameEnum { a,b,c }
    
    [Serializable]
    public class Class {
                    public NameEnum Name {get;set;}
                    public int Value {get;set;}
    }
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Popo    7 年前

    你应该能够做到:

    using System.Xml.Serialization;
    
    
    [Serializable]
    public enum NameEnum
    {
        [XmlEnum(Name = "a")]
        a,
        [XmlEnum(Name = "b")]
        b,
        [XmlEnum(Name = "c")]
        c
    }
    

    工作示例,添加到控制台应用程序:

    class Program
        {
            static void Main(string[] args)
            {
                AClass c = new AClass();
                c.Name = NameEnum.c;
                c.Value = 2;
    
                using (MemoryStream ms = new MemoryStream())
                {
                    XmlSerializer s = new XmlSerializer(typeof(AClass));
                    s.Serialize(ms, c);
                    File.WriteAllBytes(@"c:\test\serializeEnum.xml", ms.ToArray());
    
                }
    
                using (MemoryStream ms2 = new MemoryStream(File.ReadAllBytes(@"c:\test\serializeEnum.xml")))
                {
                    XmlSerializer xs = new XmlSerializer(typeof(AClass));
                    AClass t = (AClass)xs.Deserialize(ms2);
                    Console.WriteLine(t.Name.ToString());
                    Console.WriteLine(t.Value.ToString());
                    Console.ReadLine();
                }
    
    
            }
        }
    
        [Serializable]
        public enum NameEnum
        {
            [XmlEnum(Name = "a")]
            a,
            [XmlEnum(Name = "b")]
            b,
            [XmlEnum(Name = "c")]
            c
        }
    
        [Serializable]
        public class AClass
        {
            public NameEnum Name { get; set; }
            public int Value { get; set; }
        }