从xml转换时确保存在值

时间:2013-10-21 15:13:07

标签: c# xml

我有一个将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.使用上面的代码有什么办法可以验证创建的类,而不是围绕它编写一个包装类?我需要确保为所有必填字段填充数据。

1 个答案:

答案 0 :(得分:0)

XmlSerializer中没有内置工具来执行此操作。你可以用反射自己做。由于XmlSerializer只加载公共属性和字段,因此您可以迭代类的所有公共属性和字段,并确保它们都保存数据。你必须决定如何处理值类型(int,DateTime等等),因为在加载或不加载时它并不明显。您还必须以递归方式潜入引用类型。

如果您只需将特定属性\字段标记为必填项,则可以添加自己的属性并使用它来装饰类成员。在运行时,您将只处理具有属性集的属性。

简而言之,除非您需要针对许多不同场景的通用机制,否则最好手动为您必须验证的属性。