如何将此JSON反序列化为对象?
我正在尝试使用JSON.Net将JSON对象反序列化为C#对象。
我想要创建的对象是MonthlyPerformance
,它包含Type
列表,其中包含Categories
列表,而MonthlyPerformance
列表又包含一个Funds
列表。 它们被定义为:
public class MonthlyPerformance { public List Types { get; set; } } public class Type { public int Id { get; set; } public string CountryId { get; set; } public string Name { get; set; } public List Categories { get; set; } public Type() { } } public class Category { public int Id { get; set; } public string CountryId { get; set; } public string Name { get; set; } public List Funds { get; set; } public Category() { } } public class Fund { public int Id { get; set; } public string CountryId { get; set; } public string Name { get; set; } public Fund() { } }
我认为以下会这样做,但事实并非如此。 它只是创建一个Type
对象的实例,其中包含所有null:
var file = File.ReadAllText(filePath); var types = JsonConvert.DeserializeObject(file);
这是我正在使用的JSON:
{ "MonthlyPerformance": { "Type": [ { "id": "65", "countryId": "IE", "name": "Irish Domestic Funds (Gross)", "Category": [ { "id": "25003334", "countryId": "IE", "name": "UK Equity", "ConfigurationFund": [ { "id": "25000301", "countryId": "IE", "name": "Aviva Irl UK Equity Fund" }, { "id": "25000349", "countryId": "IE", "name": "New Ireland UK Equity 9" } ] }, { "id": "25003339", "countryId": "IE", "name": "Irish Equity", "Fund": [ { "id": "25000279", "countryId": "IE", "name": "Friends First Irish Equity G" }, { "id": "25000305", "countryId": "IE", "name": "Irish Life Celticscope 2 G" } ] } ] }, { "id": "80", "countryId": "IE", "name": "Irish Individual Pensions", "Category": [ { "id": "25003347", "countryId": "IE", "name": "Asia Pacific Ex-Japan Equity", "Fund": [ { "id": "25001789", "countryId": "IE", "name": "Aviva Irl Pacific Basin Eq" }, { "id": "25002260", "countryId": "IE", "name": "Ir Life Pacific Eq Indexed P" } ] }, { "id": "25003365", "countryId": "IE", "name": "Flexible Equity", "Fund": [ { "id": "25003238", "countryId": "IE", "name": "Friends First Protected Equity Plus Fund S2" }, { "id": "25003267", "countryId": "IE", "name": "Friends First Protected Equity Plus Bond G" } ] } ] } ] } }
我需要做些什么才能让它发挥作用?
编辑以包含MonthlyPerformance
我相信问题出在你的Json字符串中。
"Type": [ ... ]
应该
"Types": [ ... ]
Types
是应该反序列化的属性的名称,你错误地输入Type
类名。
Type
类中的Categories
属性也是如此。
此外,我只是从Json字符串中删除了"MonthlyPerformance"
根,它就像一个魅力。 当然还有Json.NET。
以下是修改后的Json的片段,其中包含适当的属性名称(通知,类型,类别,基金和缺少MonthlyPerformance根)
{ "Types": [ { "id": "65", "countryId": "IE", "name": "Irish Domestic Funds (Gross)", "Categories": [ { "id": "25003334", "countryId": "IE", "name": "UK Equity", "Funds": [ { "id": "25000301", "countryId": "IE", "name": "Aviva Irl UK Equity Fund" }, { "id": "25000349", "countryId": "IE", "name": "New Ireland UK Equity 9" } ] }
您对类的上述代码乍一看看起来是正确的。
我已成功使用以下类(JavaScriptSerializer)反序列化JSON。 用法如下
using System.Web.Script.Serialization; JavaScriptSerializer js = new JavaScriptSerializer(); string file = File.ReadAllText(filePath); MonthyPerformance json = js.Deserialize(file);
哦,并为每个类的类属性添加[Serializable]
[Serializable] class whatever{}
您是否会考虑使用dynamic
对象而不是反序列化到对象? (未声明MonthlyPerformance
, Type
, Category
, Fund
)
Facebook C#SDK获取用户语言/区域
Google Maps v3地理编码服务器端
用法:
dynamic jobj = JsonUtils.JsonObject.GetDynamicJsonObject(JsonString); foreach (var item in jobj.MonthlyPerformance.Type) { Console.WriteLine(item.name); foreach (var category in item.Category) { Console.WriteLine("t" + category.name); if (category.ConfigurationFund != null) { foreach (var fund in category.ConfigurationFund) { Console.WriteLine("tt" + fund.name); } } } }
所需的助手类就在这里
您的属性名称与JSON的属性名称不匹配。 我希望序列化失败。
鉴于您发布的JSON,我希望您的c#类看起来像这样。 我不熟悉JSON.net,但我认为他们有一个属性装饰器,允许你指定c#prop匹配的JSON属性的名称。
public class MonthlyPerformance { public List Type { get; set; } } public class Type { public int id { get; set; } public string countryId { get; set; } public string Name { get; set; } public List Category { get; set; } public Type() { } } public class Category { public int id { get; set; } public string countryId { get; set; } public string name { get; set; } public List ConfigurationFund{ get; set; } public Category() { } } public class Fund { public int id { get; set; } public string countryId { get; set; } public string name { get; set; } public Fund() { } }
这就是我用于JSON反序列化的内容……
using System.Web.Script.Serialization; namespace blahblah { public partial class AccessTierService : ServiceBase { public static T ia_deserialize_json(string json_string) { try { if ((String.Compare(json_string, null) == 0) || (String.Compare(json_string, "") == 0) || (String.Compare(json_string, String.Empty) == 0)) { return default(T); } JavaScriptSerializer serializer = new JavaScriptSerializer(); return (T)serializer.Deserialize (json_string); } catch (Exception) { return default(T); } } } }
并称之为……
上述就是C#学习教程:如何将此JSON反序列化为对象?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
login_request = ia_deserialize_json(body_string);
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/960752.html