Я работаю с API, который возвращает XML. Если я вызову API с одним набором параметров, я вернусь к XML, который выглядит примерно так:
Тип 1:
<root>
<foos>
<foo>some</foo>
<foo>text</foo>
<foo>here</foo>
</foos>
</root>
Но если я вызову API с другим наборомпараметры, я получаю обратно XML, который выглядит примерно так:
Тип 2:
<root>
<foos>
<foo>
<fooName>some</fooName>
<fooId>1</fooId>
<fooDate>11-8-2019</fooDate>
</foo>
<foo>
<fooName>text</fooName>
<fooId>2</fooId>
<fooDate>11-9-2019</fooDate>
</foo>
<foo>
<fooName>here</fooName>
<fooId>3</fooId>
<fooDate>11-10-2019</fooDate>
</foo>
</foos>
</root>
Я хотел бы смоделировать это как один объект C #, если это возможно ... так, чтобы яможет десериализовать любой XML с помощью чего-то подобного:
private root Deserialize(string xmlData)
{
var serializer = new XmlSerializer(typeof(root));
using (var reader = new StringReader(xmlData))
{
return (root)serializer.Deserialize(reader);
}
}
Я пытался моделировать классы XML следующим образом:
[XmlRoot("root")]
public class Root
{
[XmlAttribute(AttributeName = "foos")]
public List<string> foos { get; set; }
}
Когда класс выглядит следующим образом, я могу десериализовать xmlData для Type1 (и я получаю список строк). Но когда я пытаюсь десериализовать xmlData для типа 2, все становится пустым ...
И если я моделирую класс XML следующим образом:
[XmlRoot("root")]
public class Root
{
[XmlAttribute(AttributeName = "foos")]
public List<Foo> foos { get; set; }
}
[XmlRoot("foo")]
public class Foo
{
[XmlAttribute(AttributeName = "fooName")]
public string FooName { get; set; }
[XmlAttribute(AttributeName = "fooId")]
public string FooId { get; set; }
[XmlAttribute(AttributeName = "fooDate")]
public string FooDate { get; set; }
}
Тогда я могу десериализовать xmlData дляТип 2 (и я получаю список сложных объектов). Но, конечно, это не работает для xmlData для типа 1.
Есть ли способ моделировать классы в C # для обработки обоих случаев?