Сериализировать переменную класса как xml без создания нового элемента - PullRequest
1 голос
/ 20 сентября 2010

У меня есть два класса, 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);
    }
}

PS: Это должно быть задано раньше, но я не уверенчто искать.Мой гугл-фу оказывается пустым ...

Редактировать:

И я надеюсь избежать решения "обертки", если это возможно:

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 ]

0 голосов
/ 20 сентября 2010

Ответ Арсения правильный, хотя он немного двусмысленный, поэтому вот что нужно изменить:

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

И это дает:

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

Надеюсь, это то, что вы хотели.

0 голосов
/ 20 сентября 2010

вам нужно сделать свойство B и пометить его XMLAttribute.

...