XML
XML の要素の名前に一致するオブジェクトのプロパティに基づいて、文字列の特定の要素をオブジェクトに処理したいと考えています。
の構造の例XML
は次のとおりです。
<Bar>
<Body>
<Header>
<A>Value</A>
<B>true</B>
</Header>
<Data>
<D>Value</D>
</Data>
<Data>
<D>Value2</D>
<Data>
</Body>
</Bar>
XML には多数の要素を含める ことができますが、存在するのは一度だけです。私が設定したクラスは次のとおりです。<Data>
<Header>
public class Foo
{
public string A { get; set; }
public bool B { get; set; }
public List<FooData> { get; set; }
public void ProcessXml(string xml)
{
XDocument xDoc = XDocument.Load(new StringReader(xml));
var propVals = (from ele in xDoc.Descendants()
join prop in this.GetType().GetProperties() on ele.Name.LocalName equals prop.Name
select new
{
prop = prop,
val = new Func<object>(() =>
{
object objValue = null;
prop.PropertyType.TryParse(ele.Value, ref objValue);
return objValue;
}).Invoke()
});
propVals.ToList().ForEach(x => x.prop.SetValue(this, x.val, null));
}
}
public class FooData
{
public string D { get; set; }
}
ProcessXml
設定を開始する方法を思いつきましたが、現時点ではHeader
値 (A、B)のみを設定しています。同じメソッド内で多くのFooData
項目を簡単に追加する方法についてのアイデアはありますか?List
public static class TypeExtensions
{
public static void TryParse(this Type t, object valIn, ref object valOut)
{
//Do some parsing logic
try{
out = TypeDescriptor.GetConverter(t).ConvertFromInvariantString(valIn);
return true;
} catch(Exception) { return false; }
}
}