C# 在C中反序列化JSON
我将JSON对象存储在变量中。JSON看起来像C# 在C中反序列化JSON,c#,json,json-deserialization,C#,Json,Json Deserialization,我将JSON对象存储在变量中。JSON看起来像 { "data": [ {"SNumber":"05", "LName":"TyJ", "LNameMarkup":"18/TyJ" }]} 我为类似JSON的代码创建了模型类 namespace SetName.Models { public class SNameDTO { public class Datum { public string SNumber { get; set; } public string
{
"data":
[
{"SNumber":"05",
"LName":"TyJ",
"LNameMarkup":"18/TyJ"
}]}
我为类似JSON的代码创建了模型类
namespace SetName.Models
{
public class SNameDTO
{
public class Datum
{
public string SNumber { get; set; }
public string LName { get; set; }
public string LNameMarkup { get; set; }
}
public class RootObject
{
public List<Datum> data { get; set; }
}
}
}
我将上面的代码替换为
SNameDTO.RootObject retSName = GetSName(StockNumber);
它抛出错误,就像
无法将类型“string”隐式转换为“SetName.Models.SNameDTO.RootObject”
我试图使用模型类而不是动态对象。要真正反序列化JSON字符串,您需要做更多的工作。如果您使用NuGet上提供的Json.Net,您可以尝试以下方法:
var myClass = JsonConvert.DeserializeObject<RootObject>(GetSName(StockNumber));
使用了Newtonsoft JSON nuget包,可以如下反序列化,希望对您有所帮助
class Program
{
static void Main(string[] args)
{
var json = "{\"SNumber\":\"05\",\"LName\":\"TyJ\",\"LNameMarkup\":\"18/TyJ\"}";
var jsonCollection =
"[{\"SNumber\":\"05\",\"LName\":\"TyJ\",\"LNameMarkup\":\"18/TyJ\"},\r\n{\"SNumber\":\"10\",\"LName\":\"TyJ2\",\"LNameMarkup\":\"20/TyJ\"}]";
var jsonRootObject = "{ \"data\" : [{\"SNumber\":\"05\",\"LName\":\"TyJ\",\"LNameMarkup\":\"18/TyJ\"}, {\"SNumber\":\"10\",\"LName\":\"TyJ2\",\"LNameMarkup\":\"20/TyJ\"}]}";
var data = JsonConvert.DeserializeObject<SNameDTO.Datum>(json);
var dataCollection = JsonConvert.DeserializeObject<List<SNameDTO.Datum>>(jsonCollection);
var rootObject = JsonConvert.DeserializeObject<SNameDTO.RootObject>(jsonRootObject);
}
}
public class SNameDTO
{
public class Datum
{
public string SNumber { get; set; }
public string LName { get; set; }
public string LNameMarkup { get; set; }
}
public class RootObject
{
public List<Datum> data { get; set; }
}
}
GetSName中的代码是什么?可能是@RenatoAfonso的重复,该方法返回我上面发布的JSON。@使用动态对象的NewFurnity。我在看我是否可以使用模型类。如果我可以使用Model类,我该如何处理呢?你没有反序列化任何东西,只是试图将字符串转储到模型中。你的JSON是一个字符串,这是行不通的RootObject@xyz这是你自己定义的属性。。。如果您想要列表中第一个数据对象的Lname,那么myClass.data.First.Lname如何?这与json或反序列化关系不大。我建议您首先检查debug是否可以进行反序列化。如果您不想安装其他软件包,.NET JavaScriptSerializer在JSON对象上运行良好。反序列化方法将JSON转换为任何类型的对象。只需添加对System.Web.Extensions程序集的引用。
class Program
{
static void Main(string[] args)
{
var json = "{\"SNumber\":\"05\",\"LName\":\"TyJ\",\"LNameMarkup\":\"18/TyJ\"}";
var jsonCollection =
"[{\"SNumber\":\"05\",\"LName\":\"TyJ\",\"LNameMarkup\":\"18/TyJ\"},\r\n{\"SNumber\":\"10\",\"LName\":\"TyJ2\",\"LNameMarkup\":\"20/TyJ\"}]";
var jsonRootObject = "{ \"data\" : [{\"SNumber\":\"05\",\"LName\":\"TyJ\",\"LNameMarkup\":\"18/TyJ\"}, {\"SNumber\":\"10\",\"LName\":\"TyJ2\",\"LNameMarkup\":\"20/TyJ\"}]}";
var data = JsonConvert.DeserializeObject<SNameDTO.Datum>(json);
var dataCollection = JsonConvert.DeserializeObject<List<SNameDTO.Datum>>(jsonCollection);
var rootObject = JsonConvert.DeserializeObject<SNameDTO.RootObject>(jsonRootObject);
}
}
public class SNameDTO
{
public class Datum
{
public string SNumber { get; set; }
public string LName { get; set; }
public string LNameMarkup { get; set; }
}
public class RootObject
{
public List<Datum> data { get; set; }
}
}