代码之家  ›  专栏  ›  技术社区  ›  simendsjo

将类变量序列化为XML而不创建新元素

  •  1
  • simendsjo  · 技术社区  · 14 年前

    我有两个类,A和B。A有一个B的实例,当序列化A时,我希望B与A处于同一级别,而不是子元素。

    所以我希望得到的xml变成

        <a>
          <avalue>a</avalue>
          <bvalue>b</bvalue>
        </a>
    

    这个程序把B放在它自己的元素中

        <a>
          <avalue>a</avalue>
          <b>
            <bvalue>b</bvalue>
          </b>
        </a>
    
    public class A
    {
        public string avalue = "a";
        public B b = new B();
    }
    
    public class B
    {
        public string bvalue = "b";
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            var a = new A();
            var xml = new XmlSerializer(a.GetType());
            xml.Serialize(new StreamWriter(@"c:\temp\tmp.xml"), a);
        }
    }
    

    附言:这肯定是以前问过的,但我不知道该找什么。我的谷歌地图是空的…

    编辑:

    如果可能的话,我希望避免使用“包装器”解决方案:

    public class A
    {
        public string avalue = "a";
    
        [XmlIgnore]
        public B b { get; set; }
    
        [XmlElement("bvalue")]
        public string bvalue
        {
            get { return b.bvalue; }
            set { b.bvalue = value;  }
        }
    }
    
    2 回复  |  直到 14 年前
        1
  •  0
  •   Arseny    14 年前

    您需要创建b属性并用xmlattribute标记它。

        2
  •  0
  •   Richard J. Ross III    14 年前

    Arseny的回答是正确的,虽然有点模棱两可,所以下面是需要改变的:

    public class B
    {
          [XmlAttribute]
          public string bvalue = "b";
    }
    

    结果是:

    <?xml version="1.0" encoding="utf-8"?>
    <A>
      <avalue>a</avalue>
      <b bvalue="b" />
    </A>
    

    希望这就是你想要的。