根据属性将元素反序列化为属性
我想看看是否有一种简单的方法可以将填充了元素的XML文件反序列化回属性类,特别是元素属性“name”作为要附加的属性。 例如,我有一个XML文件格式,如下所示:
1 test 42 hello world
我想知道是否有一种简单的方法可以将其反序列化为类似于此格式的类:
public class SomeObject { [XmlElement("number_value_one")] public Int32 NumberValueOne { get; set; } [XmlElement("number_value_two")] public Int32 NumberValueTwo { get; set; } [XmlElement("string_value_one")] public String StringValueOne { get; set; } [XmlElement("string_value_two")] public String StringValueTwo { get; set; } }
我知道格式不是最好的序列化等,但我不能改变文件格式为这个项目的格式。 目前我正在手工阅读每个元素的价值,这是很多代码和相当混乱。 要将它序列化回xml,我使用reflection来解决手工编写每个元素的需要。 但我想知道是否有一种简单的方法来处理这种格式。
并非所有元素都是string / int,有些是读取后要解析的自定义类型等。
例如,您可以使用xslt将输入字符串转换为XmlSerializer
识别的数据。
var transform = new XslCompiledTransform(); transform.Load(XmlReader.Create(new StringReader(transformText))); var memoryStream = new MemoryStream(); transform.Transform(new XPathDocument(new StringReader(text)),null,memoryStream); memoryStream.Seek(0, SeekOrigin.Begin); var deserializer = new XmlSerializer(typeof(SomeObject)).Deserialize(memoryStream);
哪里
var transformText = @" ";
和
var text = @" 1 test 42 hello world ";
请注意, setting
name
属性值必须使用XmlElementAttribute
应用于属性。
如果你不理解xslt只是搜索它,那里有很多例子和参考 。