XmlSerializer を使用するとattribute overrides
、実行時に動的に指定できます。次の静的クラスがあるとします。
public class Foo
{
public string Bar { get; set; }
}
および次の XML:
<?xml version="1.0" encoding="utf-8" ?>
<foo bar="baz" />
モデル クラスで静的属性を使用せずに、実行時にマッピングを動的に追加できます。ちょうどこのような:
using System;
using System.Xml;
using System.Xml.Serialization;
public class Foo
{
public string Bar { get; set; }
}
class Program
{
static void Main()
{
var overrides = new XmlAttributeOverrides();
overrides.Add(typeof(Foo), new XmlAttributes { XmlRoot = new XmlRootAttribute("foo") });
overrides.Add(typeof(Foo), "Bar", new XmlAttributes { XmlAttribute = new XmlAttributeAttribute("bar") });
var serializer = new XmlSerializer(typeof(Foo), overrides);
using (var reader = XmlReader.Create("test.xml"))
{
var foo = (Foo)serializer.Deserialize(reader);
Console.WriteLine(foo.Bar);
}
}
}
あとは、属性のオーバーライドを含む XML ファイルを読み取り、コンストラクターに渡すインスタンスXmlAttributeOverrides
を実行時にビルドするカスタム コードを記述するだけですXmlSerializer
。