我有以下代码尝试反序列化JSON字符串,该库给我这个错误:
在JSON参考对象中找到的其他内容.JSON引用对象应该只有$ ref属性.路径'user.obj',第1行,第34位.
知道什么是错的吗?(我知道它正在抱怨第二个$ ref,但我不知道为什么.)解决方法是什么?
void Main()
{
var s = "{\"user\": {\"$ref\": \"123456\", \"obj\": {\"$ref\": \"123456\"}}}";
JsonConvert.DeserializeObject<Root>(s).Dump();
}
// Define other methods and classes here
public class Root
{
[JsonProperty("user")]
public User User { get; set; }
}
public class User
{
[JsonPropertyAttribute("$ref")]
public string Ref { get; set; }
[JsonPropertyAttribute("obj")]
public Obj Obj { get; set; }
}
public class Obj
{
[JsonPropertyAttribute("$ref")]
public string Ref { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
Bri*_*ers 11
Json.Net $ref与$id元数据一起使用以保留JSON中的对象引用.因此,当它看到$ref它假定该属性不是实际JSON属性集的一部分,而是一个内部标识符引用$idJSON中其他地方的匹配.由于您的使用与$refJson.Net期望看到的不同,因此会引发错误.
UPDATE
在Json.Net 6.0.4及更高版本中,现在有一个设置,您可以通过该设置指示反序列化器将这些元数据属性视为普通属性而不是消耗它们.您需要做的就是将MetadataPropertyHandling设置设置为Ignore,然后照常反序列化.
var settings = new JsonSerializerSettings();
settings.MetadataPropertyHandling = MetadataPropertyHandling.Ignore;
var obj = JsonConvert.DeserializeObject<FormDefinitionList>(json, settings);
Run Code Online (Sandbox Code Playgroud)
在6.0.4版之前,需要一种解决方法来解决此问题.如果您无法升级到最新版本的Json.Net,请参阅我对类似问题的答案以获得一些可能的解决方案.
| 归档时间: |
|
| 查看次数: |
1969 次 |
| 最近记录: |