我可以正确创建课程吗?

时间:2018-11-15 15:41:17

标签: c# json class json.net

我正在创建一个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()); 

2 个答案:

答案 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

对转换站点http://json2csharp.com/

进行信用(略微调整)