【发布时间】:2014-03-27 18:18:45
【问题描述】:
我想找到一个好的解决方案来处理反序列化以数字开头或仅包含数字的纯字符串,并了解为什么它不能像现在这样工作。
我无法控制输入字符串,所以我不能依赖它们是有效的 Json,目前我只是检查它是否是 Json,如果不是,我会将它包装在“[ {}]",但我想看看是否有更好的方法。
这就是我反序列化它的方式:
JsonConvert.DeserializeObject<MyClass[]>(myString);
我的班级有两个属性:
[JsonProperty(PropertyName = "key")]
public string Key { get; set; }
[JsonProperty(PropertyName = "value")]
public string Value { get; set; }
如果输入字符串只是“a”或“a2”,则会抛出预期的 Newtonsoft.Json.JsonException(“解析值时遇到意外字符:a.Path '', line 0, position 0.”) ,但是“2”和“2a”会引发其他错误。我希望“2”和“2a”的行为与“a”和“a2”的行为相同。
传入“2”时的异常:
Newtonsoft.Json.JsonSerializationException : Error converting value 2 to type 'MyClass[]'. Path '', line 1, position 1.
System.ArgumentException : Could not cast or convert from System.Int64 to MyClass[].
传入“2a”时出现异常:
System.FormatException : Input string was not in a correct format.
为什么字符串只包含数字或以数字开头时不起作用?有没有比用“[{}]”包装输入字符串更聪明的方法来解决这个问题?
【问题讨论】:
-
如果输入是“2”或“2a”,你会期待什么?你想要什么结果?
-
Kevin,我已经更新了这个问题——我希望得到与传入“a”或“a2”时相同的结果,即抛出 Newtonsoft.Json.JsonException(“在解析值:a. Path '', line 0, position 0.").
-
您正在尝试将输入反序列化为“MyClass[]”强类型。但是您输入的 json 并不代表这种类型。您输入的 json 代表一个 int,其中一个是有效的(“2”),另一个不是“2a”。第二个应该写成 json 中的字符串,即 C# 代码中的 "\"2a\""。所以你的 json 格式不正确,我们需要知道它到底是如何畸形来提出解决方案的。
标签: c# json deserialization json-deserialization