В silverlight у меня есть xml:
<A>
< A1>
<B>
< B1>a1.1</B1>
<B1>a1.2</B1>
</B>
< /A1>
< A1>
<B>
<B1>a1.3< /B1>
<B1>a1.4</B1>
</B>
</A1>
</A>
Мой класс похож на этот A.cs
namespace Check
{
[XmlRoot(ElementName = "A")]
public class A
{
[XmlElement("A1")]
public List<A1> A1 { get; set; }
}
}
и A1.cs:
namespace Check
{
[XmlRoot(ElementName = "A1")]
public class A1
{
[XmlArray("B")]
[XmlArrayItem("B1", typeof(string))]
public List<string> B { get; set; }
}
}
Класс B.cs - это
namespace Check
{
[XmlRoot(ElementName = "B")]
public class B
{
[XmlArray("B")]
[XmlArrayItem("B1", typeof(string))]
public List<string> B1 { get; set; }
}
}
И я пытаюсь сериализовать это, в Xml.cs:
namespace Check
{
public static class Xml
{
public static string ToXml(this object objectToSerialize)
{
var memory = new MemoryStream();
var serial = new XmlSerializer(objectToSerialize.GetType());
serial.Serialize(memory, objectToSerialize);
var utf8 = new UTF8Encoding();
return utf8.GetString(memory.GetBuffer(), 0, (int)memory.Length);
}
}
}
Основной класс функций:
namespace Check
{
public class ControlClass
{
public void Main()
{
var a = new A() ;
var xml = a.ToXml();
}
}
}
Правильно ли мой подход к сериализации? Если нет, пожалуйста, поправьте меня?
Мой выход:
<?xml version="1.0" encoding="utf-8" ?>
<A xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
Да, это правильно... иш. Причина, по которой не показывает более потому, что ваш экземпляр имеет только одно свойство (A
A1
), и имеет null
значение. Добавьте данные, и он появится:
var a = new A {
A1 = new List<A1> {
new A1 { B = new List<string> { "a1.1", "a1.2" } },
new A1 { B = new List<string> { "a1.3", "a1.4" } }
}
};
Даже пустой список помог бы. По этой причине вы можете использовать:
[XmlElement("A1")]
public List<A1> A1 { get { return a1; } }
private readonly List<A1> a1 = new List<Check.A1>();
а также:
[XmlArray("B")]
[XmlArrayItem("B1", typeof(string))]
public List<string> B { get { return b1; } }
private readonly List<string> b1 = new List<string>();
вместе с:
var a = new A {
A1 = {
new A1 { B = { "a1.1", "a1.2" } },
new A1 { B = { "a1.3", "a1.4" } }
}
};
Примечание. Чтобы удалить объявления псевдонима имен по умолчанию:
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");
serial.Serialize(memory, objectToSerialize, ns);
Затем он имеет выход:
<?xml version="1.0"?>
<A>
<A1>
<B>
<B1>a1.1</B1>
<B1>a1.2</B1>
</B>
</A1>
<A1>
<B>
<B1>a1.3</B1>
<B1>a1.4</B1>
</B>
</A1>
</A>