2016-03-02 63 views
1

当使用JSON.NET TypeHandling进行json反序列化时,是否有一种方法可以自定义它用于类型的属性名称以及用于引用哪个类的名称?JSON.NET自定义类型处理

我正在使用外部api我无法控制哪个返回此风格的json。

[{ 
    "type": "comment", 
    "message": "This is a comment", 
    "user": "Mike" 
}, 
{ 
    "type": "like", 
    "user": "Matt" 
}] 

而不是“$ type”是否有办法告诉JSON.NET看“类型”?似乎在JsonObject上也应该有一个“TypeName”属性,因为它当前正在寻找完全合格的C#类名称。

这个问题是严格参照TypeHandling功能:http://www.newtonsoft.com/json/help/html/SerializeTypeNameHandling.htm

+0

你需要做一个JsonConverter处理这个。请参阅[使用json.net反序列化不使用类型信息的多态json类](http://stackoverflow.com/q/19307752/10263) –

+0

是的,它似乎是目前唯一的解决方案。实际上,TypeHandling似乎可以在这里使用更多支持的钩子。 – MrMagee

回答

0

您可以使用JsonProperty属性命名的JSON使用的属性。

JsonProperty属性应该这样来使用:

public class RootObject 
{ 
     [JsonProperty(PropertyName = "type")] // It looks for 'type' name in json and set value in MyType property 
     public string MyType{ get; set;} 
} 
+0

这不涉及TypeHandling。 TypeHandling与继承有关,并根据json属性的值选择哪个类用于反序列化。 http://www.newtonsoft.com/json/help/html/SerializeTypeNameHandling.htm – MrMagee

+0

我想,你想拥有适当的json属性的属性名称。我不熟悉json.net继承typehanding –

+0

快速浏览文档,似乎仍然可以使用JNameProperty属性TypeNameHandling.Auto参数 –

0

这种类型的定制,以TypeHandling在JSON.NET还不存在。我已经采取@BrianRogers建议和使用JsonConverters给他下面的建议。

“你需要做一个JsonConverter来处理这个请参阅使用json.net反序列化JSON多态性无类的类型信息 - 布赖恩·罗杰斯03月02日在15:41”