Например, у меня есть три класса
public class A
{
public string Abc { get; set; }
}
public class B
{
public string Xyz { get; set; }
}
public class C
{
private object itemField;
[XmlElement("A", typeof(A))]
[XmlElement("B", typeof(B))]
public object Item
{
get
{
return itemField;
}
set
{
itemField = value;
}
}
}
И я пытаюсь сериализовать экземпляр класса C
var b = new B
{
Xyz = "123123"
};
var c = new C
{
Item = b
};
var serializer = new XmlSerializer<C>();
var aaa = serializer.Serialize(c);
Тогда вывод будет
- C
- A
--- Xyz
---- 123123
--- / Xyz
- / A
- / C
Но я ожидаю
- C
- B
--- Xyz
---- 123123
--- / Xyz
- / B
- / C
Как я могу это сделать? (Я преобразовал amazon mws xsd в классы с помощью xsd.exe, и некоторые выходные классы похожи на C class, поэтому у меня возникают проблемы при попытке сериализации этих классов.)
Я использую net framework 4.6.1 и для сериализации XSerializer ( nuget.org / packages / XSerializer / 0.4.2 ).
*** РЕДАКТИРОВАТЬ: Я нашел проблему, проблема не в сериализатору. "xsd.exe" допускал ошибки в многомерных массивах при конвертации файлов xsd. Я отредактировал классы для атрибутов сериализации, и это сработало. Пример:
// I changed "[XmlArrayItem("Name", typeof(TypeName))]" To that:
[XmlArrayItem("Name", typeof(TypeName[]))]
public TypeName[][] PropName { get; set; }
Спасибо всем