JsonConvert.DeserializeObject 在使用 JsonConvert.SerializeObject 的结果后抛出错误
JsonConvert.DeserializeObject throws an Error after using the result from JsonConvert.SerializeObject
我在C#中使用Newtonsoft.Json时,发现了这样的问题
var dataDict = new Dictionary<string, List<double>>();
dataDict["$id"] = new List<double>() { 0.1, 0.9 };
var jsonStr = JsonConvert.SerializeObject(dataDict);
var back = JsonConvert.DeserializeObject<Dictionary<string, List<double>>>(jsonStr);
然后它抛出错误
Newtonsoft.Json.JsonSerializationException: 'Unexpected token when
deserializing object: Float. Path '$id[0]', line 1, position 11.'
如果我删除字符“$”,它会起作用。
我承认“$”是一个特殊的标记,我的问题是:如果你可以 SerializeObject,为什么你不能 DeserializeObject?
这里有什么工作吗?欢迎任何建议!谢谢
您可以通过将 JsonSerializerSettings
传递给您的反序列化操作来配置 Json.NET 忽略元数据属性(以“$”开头的属性)。
var back = JsonConvert.DeserializeObject<Dictionary<string, List<double>>>(
jsonStr,
new JsonSerializerSettings
{
MetadataPropertyHandling = MetadataPropertyHandling.Ignore
});
这正确地反序列化为您的目标字典结构:
我在C#中使用Newtonsoft.Json时,发现了这样的问题
var dataDict = new Dictionary<string, List<double>>();
dataDict["$id"] = new List<double>() { 0.1, 0.9 };
var jsonStr = JsonConvert.SerializeObject(dataDict);
var back = JsonConvert.DeserializeObject<Dictionary<string, List<double>>>(jsonStr);
然后它抛出错误
Newtonsoft.Json.JsonSerializationException: 'Unexpected token when deserializing object: Float. Path '$id[0]', line 1, position 11.'
如果我删除字符“$”,它会起作用。
我承认“$”是一个特殊的标记,我的问题是:如果你可以 SerializeObject,为什么你不能 DeserializeObject?
这里有什么工作吗?欢迎任何建议!谢谢
您可以通过将 JsonSerializerSettings
传递给您的反序列化操作来配置 Json.NET 忽略元数据属性(以“$”开头的属性)。
var back = JsonConvert.DeserializeObject<Dictionary<string, List<double>>>(
jsonStr,
new JsonSerializerSettings
{
MetadataPropertyHandling = MetadataPropertyHandling.Ignore
});
这正确地反序列化为您的目标字典结构: