Я создал классы из схемы XSD с помощью xsd.exe (также пытался с xsd2code, который имел лучшие результаты таким образом, что они работали немедленно, и с xsd.exe мне приходится отлаживать некоторые ошибки). XSD Schema, которую я использовал, можно найти по адресу http://www.landxml.org/schema/LandXML-1.2/LandXML-1.2.xsd, а файл-образец можно найти по адресу http://landxml.org/schema/LandXML-1.1/samples/AASHTO%20SDMS/MntnRoad.xml.Проблема странной десериализации
Мой код десериализации выглядит следующим образом:
var mySerializer = new XmlSerializer(typeof (LandXML), new XmlRootAttribute(""));
TextReader myFileStream = new StreamReader("myFile.xml");
var myObject = (LandXML) mySerializer.Deserialize(myFileStream);
Моя проблема заключается в том, что результат десериализации является список элементов типа XmlElement, так что если я пытаюсь получить доступ к их свойства, я не могу просто сделать это. Если я хочу получить доступ, например, некоторые из атрибутов объекта Alignment в myFile.xml, код похож на этот:
var a = myObject.Items[5];
var b = (XmlElement) a;
var c = b.ChildNodes.Item(5).ChildNodes.Item(0).ChildNodes.Item(0).Attributes[0].Value;
Очевидно, что это не путь, который предназначается, чтобы быть при десериализации XML в классы. Моя идея была как (для того же элемента):
var c = LandXML.Alignments.Alignment.CoordGeometry.Curve.rot
Я не знаю, что я делаю неправильно, я попытался с более простыми схемами, и этот код работает хорошо. Пожалуйста, помогите и tnx заранее!
EDIT 1
это в верхней части моего класса, и я думаю, что это приносящих неприятности типа списка. И есть больше похож код в моих сгенерированных классов
public class LandXML
{
private List<object> _items;
private System.DateTime _date;
private System.DateTime _time;
private string _version;
private string _language;
private bool _readOnly;
private int _landXMLId;
private string _crc;
public LandXML()
{
this._items = new List<object>();
}
[System.Xml.Serialization.XmlAnyElementAttribute()]
[System.Xml.Serialization.XmlElementAttribute("Alignments", typeof(Alignments))]
[System.Xml.Serialization.XmlElementAttribute("Amendment", typeof(Amendment))]
[System.Xml.Serialization.XmlElementAttribute("Application", typeof(Application))]
[System.Xml.Serialization.XmlElementAttribute("CgPoints", typeof(CgPoints))]
[System.Xml.Serialization.XmlElementAttribute("CoordinateSystem", typeof(CoordinateSystem))]
[System.Xml.Serialization.XmlElementAttribute("FeatureDictionary", typeof(FeatureDictionary))]
[System.Xml.Serialization.XmlElementAttribute("GradeModel", typeof(GradeModel))]
[System.Xml.Serialization.XmlElementAttribute("Monuments", typeof(Monuments))]
[System.Xml.Serialization.XmlElementAttribute("Parcels", typeof(Parcels))]
[System.Xml.Serialization.XmlElementAttribute("PipeNetworks", typeof(PipeNetworks))]
[System.Xml.Serialization.XmlElementAttribute("PlanFeatures", typeof(PlanFeatures))]
[System.Xml.Serialization.XmlElementAttribute("Project", typeof(Project))]
[System.Xml.Serialization.XmlElementAttribute("Roadways", typeof(Roadways))]
[System.Xml.Serialization.XmlElementAttribute("Surfaces", typeof(Surfaces))]
[System.Xml.Serialization.XmlElementAttribute("Survey", typeof(Survey))]
[System.Xml.Serialization.XmlElementAttribute("Units", typeof(Units))]
public List<object> Items
{
get
{
return this._items;
}
set
{
this._items = value;
}
}
TNX за помощью, но это не работает - на самом деле он работает, но мой сгенерированный файл класса над 30k строки кода, и это огромная работа, чтобы вручную изменить все это. Основная проблема здесь в том, что у меня есть список
Я добавил EDIT 1, чтобы лучше описать проблему –
xml-файл может иметь только один корневой тег. У вас есть массив на корневом уровне. Изменение уровня совместимости может работать. Никогда не использовал его с де-сериализацией. строка FILENAME = ""; XmlReaderSettings settings = new XmlReaderSettings(); settings.ConformanceLevel = ConformanceLevel.Fragment; XmlReader reader = XmlTextReader.Create (FILENAME, настройки); – jdweng