【发布时间】:2012-04-26 13:34:33
【问题描述】:
当我尝试反序列化这个无效的 json 字符串时(}] 最后缺少):
[{"ExtId":"2","Name":"VIP sj�lland","Mobiles":["4533333333","4544444444"]
通过这样做:
var result = JsonSerializer.DeserializeFromString<T>(str);
ServiceStack json 反序列化器接受字符串,但它创建了一个错误的对象,因为我最终得到了一个具有这些值的 C# 对象:
ExtId : "2" // ok fine.
Name: "VIP sj�lland" // ok fine
Mobiles: ["4533333333","4544444444", "544444444"]// Aarg! An array with 3 objects ?!?
// There were only two in the JSON string.
在这种情况下,抛出异常比继续处理错误数据要好得多。因此我尝试使用:
JsConfig.ThrowOnDeserializationError = true;
就在调用 DeserializeFromString 之前,但没有抛出异常。一月份我问了这个问题Configure ServiceStack.Text to throw on invalid JSON,答案是 ServiceStack 偏爱弹性,我可以在 GitHub 中提出拉取请求。
现在还是这样吗?有没有人已经这样做了,省去了我的麻烦?否则,我的日程安排很紧,所以如果有人对如何创建选项标志以使 ServiceStack 引发反序列化错误有一些代码或建议,请在此处回复,以便我可以更快地完成这项工作。
【问题讨论】:
-
我看到了您的原始帖子,我同意您至少应该可以选择打开严格的 json 验证。通过切换回 Newtonsoft 序列化程序,我得到了相同的结果。正如我的一所大学指出的那样,如果我们使用弹性序列化,我们将回到允许无错误地解析垃圾 html 的同一条道路上,因为它允许马虎的开发人员。
-
这看起来像一个错误。你提交an issue for it了吗?
标签: c# json servicestack