我有一个将xml文件转换为类对象的实用程序:
public static T CreateClassFromXml<T>(string fileName, string root) where T : class
{
fileName.ThrowNullOrEmpty("fileName");
File.Exists(fileName).ThrowFalse(string.Format("File '{0}' could not be found", fileName));
var serializer = new XmlSerializer(typeof(T), new XmlRootAttribute() { ElementName = root });
using (var reader = XmlReader.Create(fileName))
{
return (T)serializer.Deserialize(reader);
}
}
该实用程序读取xml并创建一个类T.使用上面的代码有什么办法可以验证创建的类,而不是围绕它编写一个包装类?我需要确保为所有必填字段填充数据。
答案 0 :(得分:0)
XmlSerializer中没有内置工具来执行此操作。你可以用反射自己做。由于XmlSerializer只加载公共属性和字段,因此您可以迭代类的所有公共属性和字段,并确保它们都保存数据。你必须决定如何处理值类型(int,DateTime等等),因为在加载或不加载时它并不明显。您还必须以递归方式潜入引用类型。
如果您只需将特定属性\字段标记为必填项,则可以添加自己的属性并使用它来装饰类成员。在运行时,您将只处理具有属性集的属性。
简而言之,除非您需要针对许多不同场景的通用机制,否则最好手动为您必须验证的属性。