Извините за дерьмовый заголовок. Не стесняйтесь менять его на лучшую.XML десериализация слабо типизированных объектов в .NET
Проблема заключается в следующем: у меня есть необходимость чтения набора файлов XML, которые выглядят так:
<rootElement>
<header>
<!-- some stuff here -->
</header>
<businessContent>
<oneOfSeveralAllowedSubNodesHereLikeCustomer />
<businessContent>
</rootElement>
я получил xsd.exe
генерировать классы C# из файла схемы у меня есть, и это сделало это так (упрощенно):
public class rootElement
{
public header header {get;set;}
public object businessContent {get;set;}
}
// other classes like header and classes for the values
// allowed within business content, say customer
Обратите внимание, что тип businessContent
является System.Object
, который является достаточно справедливым. В схеме ничего явно не говорится о том, что на самом деле можно положить туда. Но тогда у меня есть xml-файл, который имеет customer
внутри своего businessContent
. клиент определяется в xsd, а xsd.exe
создал для него класс. Я ожидал бы экземпляр этого класса должен быть создан и положить, как мой businessContent
, но когда я прочитал XML:
var serializer = new XmlSerializer(typeof(rootElement));
var root = (rootElement)serializer.Deserialize(stream));
var customer = (customer)root.businessContent;
я получаю исключение, потому что тип root.businessContent
является XmlNode[]
и не customer
.
Как сделать сериализатор для десериализации моего объекта полностью, то есть с customer
, а не XmlNode[]
внутри?
Это заканчивается в исключениях жалуется, что анонимный типа клиент не может быть использован здесь – kko
Является ли это ошибка компилятора или исключение во время выполнения? Можете ли вы дать нам точное сообщение об ошибке? 'customer' не является анонимным, поэтому я не понимаю, что вы сказали. –
имеет [System.Xml.Serialization.XmlTypeAttribute (AnonymousType = true)] – kko