使用Newtonsoft.Json's JsonConvert.DeserializeObject
本文关键字:JsonConvert DeserializeObject string Newtonsoft Json 使用 | 更新日期: 2023-09-27 18:04:40
我一直在使用泛型和Newtonsoft的扩展方法。Json的JsonConvert.DeserializeObject<TSource>(jsonString)
序列化工作正常
string value = string.Empty;
value = JsonConvert.SerializeObject(null); //"null"
value = JsonConvert.SerializeObject("null"); //"null"
value = JsonConvert.SerializeObject("value"); //"value"
value = JsonConvert.SerializeObject(""); //""
但是当试图反序列化
时string result = string.Empty;
result = JsonConvert.DeserializeObject("null"); //null, ok
result = JsonConvert.DeserializeObject("value"); //throwing error, expecting "value"
result = JsonConvert.DeserializeObject(""); //throwing error, expecting string.empty
错误:解析value: v. Path ",行0,位置0.
现在我在扩展方法上使用TSource : new ()
,因此任何字符串返回类型都将被限制为
public static TSource ExecuteScriptForData(this IJavaScriptExecutor javaScriptExecutor, string script, params object[] args) where TSource : new ()
这是不让我使用接口像IList
, IPerson
或ReadOnlyCollection
在TSource
现在有没有办法配置反序列化器,使它能够反序列化字符串,因为序列化器正在产生?
现在有没有办法配置反序列化器,使它能够反序列化字符串,因为序列化器正在产生?
你可以使用JsonSerializerSettings的TypeNameHandling属性。
var settings = new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All };
var str = JsonConvert.SerializeObject(null,settings);
var obj1 = JsonConvert.DeserializeObject(str, settings);
str = JsonConvert.SerializeObject("value", settings);
var obj2 = JsonConvert.DeserializeObject(str, settings);
str = JsonConvert.SerializeObject("", settings);
var obj3 = JsonConvert.DeserializeObject(str, settings);
json中的value
没有任何意义。如果你希望你的结果是string的值,你必须把它放在引号里:
string result = string.Empty;
result = JsonConvert.DeserializeObject<string>("null"); //null, ok
result = JsonConvert.DeserializeObject<string>("'value'"); // "value"
result = JsonConvert.DeserializeObject<string>("''"); // string.Empty
本文关键字:JsonConvert DeserializeObject string Newtonsoft Json 使用 | 更新日期: 2023-09-27 18:04:40
我一直在使用泛型和Newtonsoft的扩展方法。Json的JsonConvert.DeserializeObject<TSource>(jsonString)
序列化工作正常
string value = string.Empty;
value = JsonConvert.SerializeObject(null); //"null"
value = JsonConvert.SerializeObject("null"); //"null"
value = JsonConvert.SerializeObject("value"); //"value"
value = JsonConvert.SerializeObject(""); //""
但是当试图反序列化
时string result = string.Empty;
result = JsonConvert.DeserializeObject("null"); //null, ok
result = JsonConvert.DeserializeObject("value"); //throwing error, expecting "value"
result = JsonConvert.DeserializeObject(""); //throwing error, expecting string.empty
错误:解析value: v. Path ",行0,位置0.
现在我在扩展方法上使用TSource : new ()
,因此任何字符串返回类型都将被限制为
public static TSource ExecuteScriptForData(this IJavaScriptExecutor javaScriptExecutor, string script, params object[] args) where TSource : new ()
这是不让我使用接口像IList
, IPerson
或ReadOnlyCollection
在TSource
现在有没有办法配置反序列化器,使它能够反序列化字符串,因为序列化器正在产生?
现在有没有办法配置反序列化器,使它能够反序列化字符串,因为序列化器正在产生?
你可以使用JsonSerializerSettings的TypeNameHandling属性。
var settings = new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All };
var str = JsonConvert.SerializeObject(null,settings);
var obj1 = JsonConvert.DeserializeObject(str, settings);
str = JsonConvert.SerializeObject("value", settings);
var obj2 = JsonConvert.DeserializeObject(str, settings);
str = JsonConvert.SerializeObject("", settings);
var obj3 = JsonConvert.DeserializeObject(str, settings);
json中的value
没有任何意义。如果你希望你的结果是string的值,你必须把它放在引号里:
string result = string.Empty;
result = JsonConvert.DeserializeObject<string>("null"); //null, ok
result = JsonConvert.DeserializeObject<string>("'value'"); // "value"
result = JsonConvert.DeserializeObject<string>("''"); // string.Empty