在不使用json.net创建包装类的情况下反序列化

时间:2015-09-19 19:08:09

标签: c# json.net

我最近开始使用Json.net并将现有的反序列化器从JavaScript更改为Json.Net

在这样做时,我遇到了一个实施问题。

我在Json之下:

string json = @"'Album':{
  'Name': 'Classical',
  'Date': '2005-4-7T00:00:00'
}";

当我使用Json.net对它进行deSerializing时,我得到一个空响应:

var a = JsonConvert.DeserializeObject<Album>(json);

我寻求帮助并发现要反序列化,我需要创建一个Album必须属性的包装类。

但是,我有很多这样的类来反序列化它。有没有通用的方法呢?我是否需要为我的所有类创建包装器:

public class JsonOutputWrapper
{            
    public Album Album{ get; set; }
}

我可以在不创建包装类的情况下使用一些通用实现来完成这项工作:

var a = JsonConvert.DeserializeObject<Album>(json);

1 个答案:

答案 0 :(得分:3)

正如其他人所说,你的JSON无效。

假设有效的JSON是:{ "Album": { "Name": "Classical", "Date": "2005-4-7T00:00:00" } }

然后你可以这样做:

var json = "{ \"Album\": { \"Name\": \"Classical\", \"Date\": \"2005-4-7T00:00:00\" } }";
var jtoken = JsonConvert.DeserializeObject<JToken>(json);
var album = jtoken.SelectToken("Album").ToObject<Album>();

或者您也可以使用dynamic

var json = "{ \"Album\": { \"Name\": \"Classical\", \"Date\": \"2005-4-7T00:00:00\" } }";
var album = JsonConvert.DeserializeObject<dynamic>(json).Album.ToObject<Album>();