我正在创建一个JSON文件来存储模板详细信息。每个模板都有几个页面,每个页面都有几个区域和协调性。
[
{
Template_Name: "ABC",
Page_Number: [
{
Page_Details: [
{ areaName: "xxxx", coordiante: "xxxx" },
{ areaName: "xxxx", coordiante: "xxxx" },
],
},
{
Page_Details: [
{ areaName: "xxxx", coordinate: "xxxx" },
{ areaName: "xxxx", coordinate: "xxxx" },
],
},
],
},
]
下面是Template的类
class List<Template>
{
public string tempName { get; set; }
public List<pageNumber> pages { get; set; }
public List<pageDetails> pagesDetails { get; set; }
public class pageNumber
{
}
public class pageDetails
{
public List<string> areaName { get; set; }
public List<string> Coordinate { get; set; }
}
}
我做对了吗?
现在,我尝试为其分配值,但是它不起作用。
我尝试过的事情:
Template temp = new Template();
PageDetail pgDetails = new PageDetail();
PageNumber pgNumber = new PageNumber();
temp.TemplateName = "ABC";
pgDetails.AreaName = "xxx";
pgDetails.Coordinate = "yyy";
pgNumber.PageDetails.Add(pgDetails);
JsonConvert.SerializeObject(temp);
MessageBox.Show(temp.ToString());
答案 0 :(得分:2)
您可以使用QuickType app(无隶属关系,只是一个粉丝)将示例JSON快速转换为类。
对于您的输入,输出为(固定了coordiante
错字):
namespace QuickType
{
using System;
using System.Collections.Generic;
using System.Globalization;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
public partial class ImageData
{
[JsonProperty("Template_Name")]
public string TemplateName { get; set; }
[JsonProperty("Page_Number")]
public List<PageNumber> PageNumber { get; set; }
}
public partial class PageNumber
{
[JsonProperty("Page_Details")]
public List<PageDetail> PageDetails { get; set; }
}
public partial class PageDetail
{
[JsonProperty("areaName")]
public string AreaName { get; set; }
[JsonProperty("coordinate")]
public string Coordinate { get; set; }
}
}
答案 1 :(得分:0)
您的JSON不太有效(后缀逗号,并且属性名称应在其周围加上双引号),但是像NewtsonSoft.JSON这样的宽容反序列化器会让您失望。
但是真正的问题是,相对于JSON(您可以通过测试来证明自己),C#类结构几乎没有意义。属性名称大多与JSON中的属性名称不匹配,并且您对列表和对象等感到困惑。
此结构将起作用:
public class PageDetail
{
public string areaName { get; set; }
public string coordiante { get; set; }
public string coordinate { get; set; }
}
public class PageNumber
{
public List<PageDetail> Page_Details { get; set; }
}
public class Template
{
public string Template_Name { get; set; }
public List<PageNumber> Page_Number { get; set; }
}
那你就可以写
List<Template> data = JsonConvert.DeserializeObject<List<Template>>(json);
将JSON文本转换为C#变量(假设json
包含从文件读取的数据)。
演示(使用静态字符串):https://dotnetfiddle.net/qCaeUg
进行信用(略微调整)