首页 > 解决方案 > C# - 从属性名称中带有“系统”的 JSON 对象中提取值

问题描述

一开始我想说我无论如何都不是 C# 开发人员,但是在我的工作中,我收到了一个任务,我必须在 .net 中编写简单的 Web 服务。该任务不是很复杂,但是我遇到了发送到我们的 Web 服务的 JSON 有效负载在属性名称中具有“系统”的问题:

"resource": {
        "fields": {
            "System.AreaPath": "someData",
            "System.TeamProject": "someData",
            "System.IterationPath": "someData"
         }
}

我试图通过使用来获得这些值:

    public class Resource
    {
        public Fields System.AreaPath { get; set; }
    }

但是我收到一个错误(“系统”是一个命名空间,但像一个类型一样使用。)是否有关于如何执行此类任务的最佳实践?谢谢你。

标签: c#json

解决方案


一个简单的选择是在属性中指定 JSON 属性。如果您使用的是 Json.NET,则可以使用[JsonProperty]它。完整示例:

using System;
using System.IO;
using Newtonsoft.Json;

public class Fields
{
    [JsonProperty("System.AreaPath")]
    public string AreaPath { get; set; }

    [JsonProperty("System.TeamProject")]
    public string TeamProject { get; set; }

    [JsonProperty("System.IterationPath")]
    public string IterationPath { get; set; }
}

public class Resource
{
    public Fields Fields { get; set; }
}


class Program
{
    static void Main()
    {
        string json = File.ReadAllText("test.json");
        var resource = JsonConvert.DeserializeObject<Resource>(json);
        Console.WriteLine(resource.Fields.TeamProject);
    }
}

JSON (removed the "resource" part to make it a complete JSON document; I assume you know how to handle this if necessary):

{
    "fields": {
        "System.AreaPath": "someData",
        "System.TeamProject": "team project",
        "System.IterationPath": "someData"
     }
}

Output: team project


推荐阅读