Могу ли я выровнять ссылочный объект в XML, используя атрибуты? - PullRequest
1 голос
/ 20 февраля 2012

Если у меня есть следующее:

public class A
{
   public B b {get;set;}
}

public class B
{
   public string Name {get;set;}
   public string Address {get;set;
}

что я хочу, это xml как:

<A Name="some data" Address="address..." />

Итак, я пытаюсь сгладить объект, на который ссылаются, как атрибуты.

Возможно ли это с XmlSerializer?

1 Ответ

1 голос
/ 20 февраля 2012

да, вы можете сделать это с помощью интерфейса IXmlSerializable:

[Serializable]
public class MyClass : IXmlSerializable
{
    public MySubClass SubClass { get; set; }

    public XmlSchema GetSchema()
    {
        return null;
    }

    public void ReadXml(XmlReader reader)
    {
        throw new NotImplementedException();
    }

    public void WriteXml(XmlWriter writer)
    {
        writer.WriteStartAttribute("Name");
        writer.WriteString(SubClass.Name);
        writer.WriteEndAttribute();
        writer.WriteStartAttribute("Phone");
        writer.WriteString(SubClass.Phone);
        writer.WriteEndAttribute();
    }
}

[Serializable]
public class MySubClass
{
    public string Name { get; set; }
    public string Phone { get; set; }
}

и затем назовите это так

        var serializer = new XmlSerializer(typeof(MyClass));
        using (var writer = new StringWriter())
        {
            var myClass = new MyClass() {SubClass = new MySubClass() {Name = "Test", Phone = "1234"}};
            serializer.Serialize(writer, myClass);
            string xml = writer.ToString();
        }

это результат xml:

<?xml version="1.0" encoding="utf-16"?>
<MyClass Name="Test" Phone="1234" />

см. Также MSDN: http://msdn.microsoft.com/en-us/library/system.xml.serialization.ixmlserializable.aspx

или вы можете просто указать атрибуты, названные @Morpheus;)

...