這將將一個xml示例反序列化到「XmlModel」類中。將xml反序列化爲具有不同層次結構的類?
using System.Collections.Generic;
using System.IO;
using System.Xml.Serialization;
namespace XmlTest
{
public class DeserializeXml
{
public XmlModel GetXmlModel()
{
string xml = @"<?xml version=""1.0"" encoding=""utf-16""?>
<root>
<foo>
<bar>1</bar>
<bar>2</bar>
</foo>
</root>";
var dS = new XmlSerializer(typeof(XmlModel));
var m = new XmlModel();
using (var reader = new StringReader(xml))
{
return (XmlModel) dS.Deserialize(reader);
}
}
}
[XmlRoot("root")]
public class XmlModel
{
[XmlArray("foo")]
[XmlArrayItem("bar")]
public List<string> Foo { get; set; }
}
}
這將讓模型:
var d = new DeserializeXml();
result = d.GetXmlModel();
我與舊代碼工作,我不能更改不是改變XMLATTRIBUTES其他XmlModel類。這裏的問題是:實際的XML沒有「foo」的節點:
string xml = @"<?xml version=""1.0"" encoding=""utf-16""?>
<root>
<bar>1</bar>
<bar>2</bar>
</root>";
所以,現在我堅持使解串器吞下這個XML輸出類型XmlModel的任務。這可能沒有Xslt預處理或其他更復雜的方法?
您可以反序列化爲與XML匹配的格式,然後使用類似[AutoMapper](http://automapper.org/)的「升級」它。不是超級高性能,但我不知道你在這方面的要求,這可能是可以接受的。 –
你還有什麼其他限制?你可以使用不同的反序列化方法嗎? –
@Bradley Uffner使用代理類+ automapper是一個選項 - 但會涉及一些努力+性能損失,我認爲(比XSLT prrprocessor更重要)。一個替代的序列化程序是一個我沒有想到的選項,可以是一個解決方案,如果僅僅是XmlAttribute技巧將無法工作(我希望他們會)。 – TvdH