C# 使用json.net进行反序列化而不创建包装类
我最近开始使用Json.net,并将现有的反序列化程序从JavaScript更改为Json.net 在这样做的过程中,我遇到了一个实现问题 我有以下建议:C# 使用json.net进行反序列化而不创建包装类,c#,json.net,C#,Json.net,我最近开始使用Json.net,并将现有的反序列化程序从JavaScript更改为Json.net 在这样做的过程中,我遇到了一个实现问题 我有以下建议: string json = @"'Album':{ 'Name': 'Classical', 'Date': '2005-4-7T00:00:00' }"; 当我使用Json.net反序列化它时,我得到一个空响应: var a = JsonConvert.DeserializeObject<Album>(json);
string json = @"'Album':{
'Name': 'Classical',
'Date': '2005-4-7T00:00:00'
}";
当我使用Json.net反序列化它时,我得到一个空响应:
var a = JsonConvert.DeserializeObject<Album>(json);
我是否可以在不创建包装器类的情况下使用一些通用实现来实现这一点:
var a = JsonConvert.DeserializeObject<Album>(json);
var a=JsonConvert.DeserializeObject(json);
当然,您的json不是完全有效的,需要一对{}
围绕它
我想说这篇文章中的建议更像是一个黑客而不是一个合适的解决方案,但是如果您确定json唯一缺少的部分是外部对象部分,那么我们可以创建一个helper类,并使用JObject
解析json,然后将内部对象转换为指定类型
class JsonHelper
{
private const string JsonFormat = "{{{0}}}";
public static T Deserialize<T>(string json,string name)
{
var jObj = JObject.Parse(string.Format(JsonFormat, json));
var obj = jObj[name].ToObject<T>();
return obj;
}
public static T Deserialize<T>(string json)
{
return Deserialize<T>(typeof (T).Name, json);
}
}
JsonHelper类
{
private const string JsonFormat=“{{{0}}}”;
公共静态T反序列化(字符串json,字符串名称)
{
var jObj=JObject.Parse(string.Format(JsonFormat,json));
var obj=jObj[name].ToObject();
返回obj;
}
公共静态T反序列化(字符串json)
{
返回反序列化(typeof(T).Name,json);
}
}
下面是一个使用示例:
class Program
{
static void Main(string[] args)
{
string json = @"'Album':{
'Name': 'Classical',
'Date': '2005-4-7T00:00:00'
}";
var album = JsonHelper.Deserialize<Album>(json);
//or with name
var album2 = JsonHelper.Deserialize<Album>(json,"Album");
}
}
类程序
{
静态void Main(字符串[]参数)
{
字符串json=@“相册”:{
'名称':'古典',
“日期”:“2005-4-7T00:00:00”
}";
var-album=JsonHelper.Deserialize(json);
//或者用名字
var album2=JsonHelper.Deserialize(json,“Album”);
}
}
正如其他人提到的,您的JSON无效
假设有效的JSON是:{“Album”:{“Name”:“Classic”,“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>();
您的JSON字符串无效。请将其视为字符串JSON=@“专辑”:{名称“:‘古典’,‘日期’:‘2005—4-7T00:00’}”;试试这个:{“Album”:{“Name”:“Classic”,“Date”:“2005-4-7T00:00:00”}}最后一行应该是
var album2=JsonHelper.Deserialize(json,“Album”)代码>
var json = "{ \"Album\": { \"Name\": \"Classical\", \"Date\": \"2005-4-7T00:00:00\" } }";
var jtoken = JsonConvert.DeserializeObject<JToken>(json);
var album = jtoken.SelectToken("Album").ToObject<Album>();
var json = "{ \"Album\": { \"Name\": \"Classical\", \"Date\": \"2005-4-7T00:00:00\" } }";
var album = JsonConvert.DeserializeObject<dynamic>(json).Album.ToObject<Album>();