我正在使用 XmlSerializer 在 C# 中将对象写入和读取到 xml。我目前使用的属性XmlElement
and XmlIgnore
操纵对象的序列化。
如果我的 xml 文件缺少我需要的 xml 元素,我的对象仍然可以很好地反序列化(xml -> 对象)。如何指示(最好通过属性)某个字段是“必填”?
这是我当前正在使用的示例方法:
[XmlElement(ElementName="numberOfWidgets")]
public int NumberThatIsRequired {
set ...;
get ...;
}
我理想的解决方案是添加类似XmlRequired
属性。
另外,对于可用于操纵 XmlSerializer 行为的属性,是否有一个很好的参考?
我发现做到这一点的唯一方法是通过 XSD。您可以做的是在反序列化时进行验证:
static T Deserialize<T>(string xml, XmlSchemaSet schemas)
{
//List<XmlSchemaException> exceptions = new List<XmlSchemaException>();
ValidationEventHandler validationHandler = (s, e) =>
{
//you could alternatively catch all the exceptions
//exceptions.Add(e.Exception);
throw e.Exception;
};
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add(schemas);
settings.ValidationType = ValidationType.Schema;
settings.ValidationEventHandler += validationHandler;
XmlSerializer serializer = new XmlSerializer(typeof(T));
using (StringReader sr = new StringReader(xml))
using (XmlReader books = XmlReader.Create(sr, settings))
return (T)serializer.Deserialize(books);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)