gpt4 book ai didi

c# - 如何检查字符串是否包含 C# 中的可反序列化数据?

转载 作者:行者123 更新时间:2023-11-30 21:05:59 24 4
gpt4 key购买 nike

我们在为特定列序列化后保存数据,因此在检索数据时和反序列化之前如何检查字符串是否可反序列化??

最佳答案

确保字符串表示有效的序列化对象几乎与执行反序列化本身一样困难,因为您需要遍历序列化对象图,找出每个序列化字段的起始位置,以及进入该字段的数据是什么字段。

您唯一可以保存的操作是对象及其依赖项的分配。这些操作当然不是免费的,但它们是高度优化的,因此您的节省不会太大。

您可以采用推测方法,并假设您的反序列化会成功,而不是在反序列化之前预先验证字符串。您的代码可以直接反序列化您的字符串,并且在大多数情况下它会成功!* 为确保您的代码在字符串无效时不会中断,请将反序列化调用包装到 try/catch,并观察反序列化异常。如果你捕获其中任何一个,你就知道这个字符串是无效的;如果您没有捕捉到反序列化异常,您就会知道该字符串是有效的,并且您也会准备好反序列化的对象以供使用。

假设 XML 序列化,您的代码可以执行如下操作:

static bool TryDeserialize<T>(string xmlStr, out T obj) {
var ser = new XmlSerializer(typeof(T));
using(var stringReader = new StringReader(xmlStr)) {
using (var xmlReader = new XmlTextReader(stringReader)) {
try {
obj = ser.Deserialize(xmlReader);
} catch {
obj = default(T);
return false;
}
}
}
return true;
}


* 如果您的反序列化在绝大多数情况下都失败了,您可能需要重新考虑该策略。

关于c# - 如何检查字符串是否包含 C# 中的可反序列化数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11421532/

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