我最近开始使用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);
答案 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>();