JSON.NET自定义TypeHandling

时间:2016-03-02 09:23:03

标签: c# .net json.net

当使用JSON.NET TypeHandling进行json反序列化时,有没有办法自定义它用于类型的属性名称以及用于引用哪个类的名称?

我使用外部api我无法控制返回此样式的json。

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

取代" $ type"有没有办法告诉JSON.NET看"键入"?似乎也应该有一个" TypeName" JsonObject上的属性,因为它当前正在寻找一个完全限定的C#类名。

此问题严格指代TypeHandling功能:http://www.newtonsoft.com/json/help/html/SerializeTypeNameHandling.htm

2 个答案:

答案 0 :(得分: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;}
}

答案 1 :(得分:0)

JSON.NET中对TypeHandling的这种自定义尚不存在。我已经采取了@BrianRogers的建议,并根据他的建议使用了JsonConverters。

“你需要制作一个JsonConverter来处理这个问题。请参阅使用json.net反序列化没有类型信息的多态json类--Brian Rogers Mar 2 at 15:41”