Каков наилучший метод чтения XML-файла для экземпляра коллекции объекта .cs, созданного с помощью xsd.exe?
Я использовал xsd.exe для создания файла .xsd (схемы), а затем для создания файла .cs. Я выполнил шаги здесь: http://ctrlf5.net/?p=235, и это сработало отлично. .
Я не хочу использовать XmlReader и писать кучу кода для навигации по дереву документов, устанавливая по пути все общедоступные сеттеры. Мой XML-документ длинный и болезненный. Я просто хочу нажать на легкую кнопку и получить свою коллекцию. У новичка, которым я только что был потрясающий момент с xsd - как круто он сделал мой файл .cs - но если мне теперь нужно написать 500 строк кода для экземпляра моего класса - не круто. Имеет смысл только то, что теперь есть простой способ создать экземпляр моей коллекции, и я просто не знаю, что это такое и как это найти в Google. Сообщение обратно на этот вопрос, на который уже ответили, с радостью принимается.
Вот как выглядит мой xml и код:
<?xml version = "1.0" ?>
<MY_OBJECT>
<UNIQUE_ID>ABC</UNIQUE_ID>
<TYPE>TEST</TYPE>
<CLASSALIST>
<CLASSA>
<A>0</A>
<B>0</B>
<C>2598960</C>
<HS>
<H>
<DESCRIPTION>MYDESC</DESCRIPTION>
<ADDITIONAL>0</ADDITIONAL>
</H>
</HS>
</CLASSA>
</CLASSALIST>
<BONUSES>
<BONUS>
<BONUS_TYPE>Bonus Schedule</BONUS_TYPE>
<BONUS_DATA>
<ALPHA>1</ALPHA>
<BETA>4</BETA>
</BONUS_DATA>
</BONUS>
</BONUSES>
<REVISION>A</REVISION>
<CONDITION>
<GENERAL></GENERAL>
<EXCEPTION></EXCEPTION>
</CONDITION>
<ACTIONABLE>True</ACTIONABLE>
<VERSION>12345</VERSION>
<COMMENTS></COMMENTS>
</MY_OBJECT>
Здесь я пытаюсь десериализовать в List‹>:
[Test]
public void AutoXmlSampleList()
{
var xs = new XmlSerializer(typeof(List<MY_OBJECT>));
List<MY_OBJECT> list;
using (var reader = XmlReader.Create(_inputFilename2))
{
list = (List<MY_OBJECT>)xs.Deserialize(reader);
}
Assert.AreEqual("ABC", list[0].UNIQUE_ID);
}
Вот сообщение об ошибке:
System.InvalidOperationException : Unable to generate a temporary class (result=1).
error CS0030: Cannot convert type 'Test.MY_OBJECTCLASSALISTCLASSA[]' to 'Test.MY_OBJECTCLASSALISTCLASSA'
error CS0030: Cannot convert type 'Test.MY_OBJECTBONUSESBONUS[]' to 'Test.MY_OBJECTBONUSESBONUS'
error CS0030: Cannot convert type 'Test.MY_OBJECTCLASSALISTCLASSAHSH[]' to 'Test.MY_OBJECTCLASSALISTCLASSAHSH'
error CS0029: Cannot implicitly convert type 'Test.MY_OBJECTCLASSALISTCLASSA' to 'Test.MY_OBJECTCLASSALISTCLASSA[]'
error CS0029: Cannot implicitly convert type 'Test.MY_OBJECTBONUSESBONUS' to 'Test.MY_OBJECTBONUSESBONUS[]'
error CS0029: Cannot implicitly convert type 'Test.MY_OBJECTCLASSALISTCLASSAHSH' to 'Test.MY_OBJECTCLASSALISTCLASSAHSH[]'
и если я попытаюсь десериализовать не List‹>:
[Test]
public void AutoXmlSampleNotList()
{
var xs = new XmlSerializer(typeof(MY_OBJECT));
MY_OBJECT myObject;
using (var reader = XmlReader.Create(_inputFilename2))
{
myObject = (MY_OBJECT)xs.Deserialize(reader);
}
Assert.AreEqual("ABC", myObject.UNIQUE_ID);
}
что приводит к аналогичной ошибке:
System.InvalidOperationException : Unable to generate a temporary class (result=1).
error CS0030: Cannot convert type 'Test.MY_OBJECTCLASSALISTCLASSA[]' to 'Test.MY_OBJECTCLASSALISTCLASSA'
error CS0030: Cannot convert type 'Test.MY_OBJECTBONUSESBONUS[]' to 'Test.MY_OBJECTBONUSESBONUS'
error CS0030: Cannot convert type 'Test.MY_OBJECTCLASSALISTCLASSAHSH[]' to 'Test.MY_OBJECTCLASSALISTCLASSAHSH'
error CS0029: Cannot implicitly convert type 'Test.MY_OBJECTCLASSALISTCLASSA' to 'Test.MY_OBJECTCLASSALISTCLASSA[]'
error CS0029: Cannot implicitly convert type 'Test.MY_OBJECTBONUSESBONUS' to 'Test.MY_OBJECTBONUSESBONUS[]'
error CS0029: Cannot implicitly convert type 'Test.MY_OBJECTCLASSALISTCLASSAHSH' to 'Test.MY_OBJECTCLASSALISTCLASSAHSH[]'
MY_OBJECT
, а неList<MY_OBJECT>
. - person leppie   schedule 02.11.2011