これは、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出力タイプにおけるXMLModelを飲み込む作るのタスクで立ち往生しています
string xml = @"<?xml version=""1.0"" encoding=""utf-16""?>
<root>
<bar>1</bar>
<bar>2</bar>
</root>";
:実際のXMLには「foo」というノードを持っていません。これはXSLTの前処理や他のより複雑なメソッドがなければ可能ですか?
XMLと一致するフォーマットにデシリアライズし、[AutoMapper](http://automapper.org/)のようなものを使用して "アップグレード"することができます。スーパーパフォーマンスではありませんが、あなたの要件がその領域にあるかどうかわかりませんが、それは受け入れられるかもしれません。 –
その他の制限はありますか?別の方法でデシリアライズすることはできますか? –
@Bradley Uffnerプロキシクラス+オートマッペを使用することはオプションですが、ある程度の労力とパフォーマンスのペナルティが必要です。(XSLTプリプロセッサよりも)代わりのシリアライザは、単なるXmlAttributeのトリックがうまくいかない場合(私は彼らが望むと思っていた)、私が考えなかったオプションです。 – TvdH