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 
    });

这正确地反序列化为您的目标字典结构: