【发布时间】:2017-06-04 23:00:22
【问题描述】:
我有一个服务器,它接受作为 XML 序列化对象的请求,这些对象可以是 10 个左右不同的类中的任何一个。当然,为了让服务器处理请求,它必须首先将 XML 字符串反序列化回一个对象。为此,它需要知道对象来自哪个类以选择正确的反序列化器并重新构造对象。因此,最好能够在尝试反序列化之前快速检查 XML 字符串以获取对象类型,然后选择适当的反序列化器。
我一直在使用以下代码,但是,就像歌曲中所说的那样,“我知道必须有更好的方法......”任何建议或见解都将不胜感激。
private void button1_Click(object sender, EventArgs e)
{
//any class - does not matter - create an object
SomeClass tc = new SomeClass();
//populate it
tc.i = 5;
tc.s = "Hello World";
tc.d = 123.456;
//Serialize it to XML
StringWriter xml = new StringWriter();
System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(typeof(SomeClass));
x.Serialize(xml, tc);
//Extract the Class name and show the XML to the user without de-serializing it
textBox1.Text = GetClassNameFromXMLSerializedString(xml.ToString());
}
private string GetClassNameFromXMLSerializedString(string xml)
{
//The class name is somewhere in the xml
string classname = xml;
//get the start of class name
classname = xml.Substring(classname.IndexOf('>') + 4);
//get the class name which is terminated by a space
classname = classname.Substring(0, classname.IndexOf(' '));
//return it
return classname;
}
【问题讨论】:
标签: c# xml serialization