gpt4 book ai didi

c# - 如果找不到元素,我能否在 C# 中使用 XmlSerializer 进行反序列化?

转载 作者:可可西里 更新时间:2023-11-01 07:53:41 26 4
gpt4 key购买 nike

我正在使用 XmlSerializer 在 C# 中将对象写入和读取到 xml。我目前使用属性 XmlElementXmlIgnore 来操作对象的序列化。

如果我的 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);
}

关于c# - 如果找不到元素,我能否在 C# 中使用 XmlSerializer 进行反序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/259726/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com