手動でデシリアライズすることがユース ケースの正しいパスかどうかはわかりません。しかし、万能の優れた XML デシリアライザーが必要な場合は、これを試してください。
編集:これは、コレクションを返すための正しい関数です。
/// <summary>
/// Converts an XDoc into a List<T> of entities
/// </summary>
/// <typeparam name="T">Any serializable object</typeparam>
/// <param name="doc"></param>
/// <returns></returns>
public static List<T> DeserializeCollection<T>(XDocument doc)
{
if (doc == null)
return null;
try
{
XmlSerializer serializer = new XmlSerializer(typeof(List<T>));
XmlReader reader = doc.CreateReader();
List<T> result = (List<T>)serializer.Deserialize(reader);
reader.Close();
return result;
}
catch (Exception e)
{
Logging.Log(Severity.Error, "Unable to deserialize document.", e);
return null;
}
}
<ArrayOf
ノードに名前空間がある理由がわかりません。削除してみてください。それはうまくいくはずです。リストをこの関数にフィードして、「正しい」/「期待される」XML がどうあるべきかを確認することもできます。
/// <summary>
/// Converts a List<T> of entities into an XDoc.
/// </summary>
/// <typeparam name="T">Any serializable object</typeparam>
/// <param name="doc"></param>
/// <param name="paramList"></param>
public static XDocument SerializeCollection<T>(List<T> paramList)
{
if (paramList == null)
return null;
XDocument doc = new XDocument();
try
{
XmlSerializer serializer = new XmlSerializer(paramList.GetType());
XmlWriter writer = doc.CreateWriter();
serializer.Serialize(writer, paramList);
writer.Close();
return doc;
}
catch (Exception e)
{
Logging.Log(Severity.Error, "Unable to serialize list", e);
return null;
}
}
}