【发布时间】:2016-10-10 13:06:47
【问题描述】:
我有一个名为Arg 的类。
属性ArgValue 的类型为System.Object。
public class Arg
{
public string ArgName { get; set; }
public object ArgValue { get; set; }
}
如果我想像这样反序列化 JSON 字符串:
string json = @"{""ArgName"":""arg"",""ArgValue"":""/something/more/than/a/string/""}";
var jsonSerializerSettings = new JsonSerializerSettings() { };
Arg arg = JsonConvert.DeserializeObject<Arg>(json, jsonSerializerSettings);
我得到的 Arg 对象的值如下:
-
ArgName的类型为string->arg -
ArgValue的类型为object {string}->/something/more/than/a/string/
我不希望 JSON.NET 将其转换为 System.String。
如果属性是System.Object 类型,则不应将其转换为字符串。
最好让它保持原样,并且值的类型为:JToken(或JValue)。
是否有 JsonSerializerSettings 选项来配置此行为?
其他信息:
属性ArgValue中的字符串值是“不仅仅是一个字符串”,以后需要自己转换。 JsonConverter 不能在这里使用,因为此时我不知道对象的具体类型。后来我知道并需要使用JToken.ToObject<MySpecialType>()。 (比它被JsonConverter 正确转换)。
【问题讨论】:
-
好吧,字符串和对象之间的转换意味着装箱拆箱,但在您的情况下,json 包含字符串,而不是对象,因此它已经完成了您想要实现的目标。
-
那是因为不需要解析字符串值 - 字符串也是对象。如果您需要特定类型,请指定它,如果您不知道类型,请使用泛型。
-
请说明您为什么想要这种行为?
-
属性“ArgValue”中的字符串值是“不仅仅是一个字符串”,以后需要自己转换。 JsonConverter 不能在这里使用,因为此时我不知道对象的具体类型。后来我知道并需要使用 JToken.ToObject
()。 (比它被 JsonConverter 正确转换)。
标签: c# json json.net deserialization