У меня есть 2 разных типа xml-файлов, которые нужно сериализовать с помощью одного класса. Я не могу использовать синтаксический анализатор xml до сериализации. Это типичный сценарий десериализации MSMQ.XML Deserialization: имя одного и того же типа, но различное.
Проблема связана с узлом message_string в xml.
<?xml version="1.0" encoding="UTF-8"?>
<tms_msg>
<transaction>
<message_string>
<latitude>latitidue valeu</latitude>
<longitude>longitude</longitude>
</message_string>
</transaction>
</tms_msg>
и тип 2
<tms_msg>
<transaction>
<message_string>message string</message_string>
</transaction>
</tms_msg>
Классы, используемые для десериализации являются
public class transaction
{
[XmlElement("message_string", typeof(Complextype))]
public object[] StringsAndInts;
[XmlElement("message_string", typeof(string))]
public string stringValue;
}
[XmlRoot("tms_msg")]
public class tms_msg
{
[XmlElement("transaction")]
public transaction transaction;
}
public class Complextype
{
public string latitude;
public string longitude;
}
Часть Реализация
public class Program
{
public Object CreateObject(string XMLString, Object YourClassObject)
{
XmlSerializer oXmlSerializer = new XmlSerializer(YourClassObject.GetType());
//The StringReader will be the stream holder for the existing XML file
YourClassObject = oXmlSerializer.Deserialize(new StringReader(XMLString));
//initially deserialized, the data is represented by an object without a defined type
return YourClassObject;
}
static void Main(string[] args)
{
tms_msg objempq = new tms_msg();
objempq = (tms_msg)CreateObject(txtXML.Text, objempq);
}
}
Пожалуйста, не обеспечивают предложение XML разбора и нахождения элемент тип.
Просто добавьте следующее ComplexType: [XmlText] общественного String Текст {получить; задавать; } Вы все еще можете десериализовать без строки. – jdweng