【问题标题】:Struggling with a JObject[] Filtering and Matching在 JObject[] 过滤和匹配中苦苦挣扎
【发布时间】:2017-09-17 11:17:34
【问题描述】:

我正在使用 JsonClassGenerator 项目将 Json 特定转换为 C# 类。

这是我正在构建的一些中间件,用于连接我公司大量构建的 TrackVia API 项目。

我现在正在我的 .Net 应用程序中构建数据层

基本上我有一个 Json 结构,我需要对其进行解析,以确定是否应该根据“结构”中的“canUpdate”值来序列化“数据”中的属性之一。

让我们从Json结构开始:

{
  "structure": [
    {
      "name": "Updated",
      "type": "datetime",
      "required": false,
      "unique": false,
      "canRead": true,
      "canUpdate": false,
      "canCreate": false
    },
    {
      "name": "Amount",
      "type": "currency",
      "required": false,
      "unique": false,
      "canRead": true,
      "canUpdate": false,
      "canCreate": false
    },
    {
      "name": "Description",
      "type": "paragraph",
      "required": false,
      "unique": false,
      "canRead": true,
      "canUpdate": false,
      "canCreate": false
    },
    {
      "name": "Created",
      "type": "datetime",
      "required": false,
      "unique": false,
      "canRead": true,
      "canUpdate": false,
      "canCreate": false
    },
    {
      "name": "Quantity",
      "type": "number",
      "required": false,
      "unique": false,
      "canRead": true,
      "canUpdate": true,
      "canCreate": true
    },
    {
      "name": "Created By User",
      "type": "user",
      "required": false,
      "unique": false,
      "canRead": true,
      "canUpdate": false,
      "canCreate": false
    },
    {
      "name": "ID",
      "type": "number",
      "required": false,
      "unique": true,
      "canRead": true,
      "canUpdate": false,
      "canCreate": false
    },
    {
      "name": "Last User",
      "type": "user",
      "required": false,
      "unique": false,
      "canRead": true,
      "canUpdate": false,
      "canCreate": false
    },
    {
      "name": "Unit_Tracker",
      "type": "relationship",
      "required": false,
      "unique": false,
      "canRead": true,
      "canUpdate": true,
      "canCreate": true
    },
    {
      "name": "Project_Materials",
      "type": "relationship",
      "required": false,
      "unique": false,
      "canRead": true,
      "canUpdate": true,
      "canCreate": true
    },
    {
      "name": "Record ID",
      "type": "identifier",
      "required": false,
      "unique": false,
      "canRead": true,
      "canUpdate": false,
      "canCreate": false
    }
  ],
  "data": [
    {
      "Updated": "2017-04-20T10:12:00.000-06:00",
      "Project_Materials(id)": 404,
      "Unit_Tracker(id)": 209,
      "Amount": "78.18",
      "Description": "1/2 in",
      "Quantity": "1",
      "Created By User": "By",
      "Unit_Tracker": "R04-5050",
      "Project_Materials": "1001755734",
      "id": 772,
      "Created": "2017-04-20T10:12:00.000-06:00",
      "Last User": "By",
      "Last User(id)": 58443,
      "Created By User(id)": 58443,
      "Record ID": "1/2 in"
    }
  ],
  "totalCount": 763
}

这是我需要匹配的。我需要将“数据”中的键(即“更新”)与“结构”中的键值匹配,即结构->“名称”:“更新”,然后确定“canRead”、“canUpdate”、“canCreate”的值设置某种标志。

然后,该标志将告诉 Codewriter 添加一行“[JsonIgnoreSerialization]”并在我的输出文本中生成如下格式化属性:

        [JsonIgnoreSerialization]
        [JsonProperty("Updated")]
        public string Updated { get; set; }

我什至没有使用过 JObjects,所以我的代码目前为空,因为我不知道从哪里开始。

这是一个大问题的原因是因为我必须根据从他们的 API 导出的 Json 将 Trackvia 中的数百个表转换为我的应用程序中的 C# 类 - 这将花费我数周的时间,我希望有一个定制的转换工具它为我构建了我的 C# 类 - 所以拥有它会很棒。

不是在寻找施舍,我愿意为自己的成功而努力,需要一些方向。

【问题讨论】:

  • 您觉得这个答案有用吗?还是没有解决您的问题?

标签: c# .net json modeling


【解决方案1】:

试试这个自定义类结构

public class Root
{
    public List<Structure> structure;
}

public class Structure
{
    public string name { get; set; }
    public string type { get; set; }
    public string required { get; set; }
    public string unique { get; set; }
    public string canRead { get; set; }
    public string canUpdate { get; set; }
    public string canCreate { get; set; }
}

并使用以下代码访问canUpdate属性。

using (var stream = new StreamReader("sample.json"))
{

     var rootObject = JsonConvert.DeserializeObject<Root>(stream.ReadToEnd());
     int index = 0;
     foreach (var structures in rootObject.structure)
     {
          Console.WriteLine(structures.canUpdate);
     }
}

注意: sample.json 包含您的 JSON 响应。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    • 2019-03-21
    相关资源
    最近更新 更多