"Student"のプロパティとして "name"という名前の "Student"クラスがネストされた "School"クラスがあります。C#で汎用リストオブジェクトにXMLを読み込む方法は?
public class school
{
private List<student> mystudents;
public class student
{
private string name;
}
}
学校には多くの学生がいて、各学生には名前があります。
私は、XML文書を持っている:
<school>
<student>
<name>John</name>
</student>
<student>
<name>Jane</name>
</student>
<student>
<name>Jack</name>
</student>
</school>
は、私は学校のオブジェクトを作成し、学校・オブジェクトにこのXMLを読みたい、私はそれをどのように行うのですか、と言うことができますか? XMLをオブジェクトに読み込み、すべてのプロパティに値を再帰的にコピーする作業コードを記述しました。私はserializers
を使用するのでは思いました
/*----------------------------------------------------------------
' Template to read XML document into a Objects
'-----------------------------------------------------------------*/
public static T XmlToObject<T>(string fileName, T obj)
{
// read XML
string xmlString = File.ReadAllText(fileName);
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(xmlString);
// read the root node
XmlNode groupsListNode = xmlDocument.GetElementsByTagName(obj.GetType().Name).Item(0);
// iterate through and copy values
XmlNodeToListProperties(groupsListNode, obj);
return obj;
}
public static void XmlNodeToProperties(XmlNode listNode, object obj)
{
//iterate through properties of object and copy from listNode
foreach(var prop in obj.GetType().GetProperties())
{
if (listNode[prop.Name] != null)
{
if (listNode[prop.Name].ChildNodes.Count > 1) // has child-properties
{
// call recursively
XmlNodeToProperties(listNode[prop.Name], prop.GetValue(obj, null));
}
else // no child properties
{
// get proprty type
Type t = Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType;
// convert listNode.FirstChild.value to PropertyType
object safeValue = CustomConvert(listNode[prop.Name], t) ;
// store in object
prop.SetValue(obj, safeValue, null);
}
}
が、問題:私は以下
が再帰的に、汎用オブジェクトにXMLを読み取るための私のコードで私はList<T>
すなわち、一般的なリストについては、この作品を作るのですか方法がわかりませんそれぞれのプロパティにはxmlElement("name")
が必要ですか?私のオブジェクト/クラスのいくつかはサードパーティのAPIから来ているので、 `xmlElement(" name ")を挿入するためにクラスファイルを編集するアクセス権がありません。ジェネリックリストに対応するために、上記の汎用テンプレートを変更/変更するための提案はありますか?
各xmlファイルは、特定のカスタムオブジェクトタイプにロードする必要のあるデータで構成されています。したがって、私は 'GetElementsByTagName'を使用しています。私はそのカスタムオブジェクト型のすべてを読み込み可能にしたいからです。私は第三者APIからクラスのコンストラクタを呼び出すことができます。 – user2979010