请参考以下JSON:-

{
    "operations": [
        {
            "creationTime": "2022-06-02T10:28:28.765+03:00",
            "deviceId": "43432103",
            "deviceName": "P25-SC-0228",
            "id": "121985460",
            "status": "PENDING",
            "com_cumulocity_model": {
                "op": "s",
                "param": "waterStartDateTime",
                "value": "1/2/2018, 7:30:00 AM"
            },
            "description": "Generate Plan"
        },
        {
            "creationTime": "2022-06-02T10:28:36.276+03:00",
            "deviceId": "43432103",
            "deviceName": "P25-SC-0228",
            "id": "121985465",
            "status": "PENDING",
            "com_cumulocity_model": {
                "Mode": 0,
                "StopStationPayload": "[{\"ControllerAddress\":11,\"StationAddress\":26}]"
            },
            "description": "Stop Station"
        }
    ],
    "statistics": {
        "currentPage": 1,
        "pageSize": 5
    }
}

请在下面找到我的代码:-

namespace handleDeviceOperations
{
    
class Program
{

string operationID = String.Empty;
static async Task Main(string[] args)
{
    var serviceCollection = new ServiceCollection();
    ConfigureServices(serviceCollection);
    var services = serviceCollection.BuildServiceProvider();
    var httpClientFactory = services.GetRequiredService<IHttpClientFactory>();

    var httpClientGetOperations = httpClientFactory.CreateClient("getOperations");
    var request1 = await httpClientGetOperations.GetAsync("");

    if (request1.IsSuccessStatusCode)
    {
        var responseMessage1 = await request1.Content.ReadAsStringAsync();
        JObject obj = JObject.Parse(responseMessage1);
        var root = JsonConvert.DeserializeObject<RootObject>(responseMessage1);

        RootObject myDeserializedObject = JsonConvert.DeserializeObject<RootObject>(responseMessage1);
        
        if (obj["operations"].HasValues)
        {
            foreach(var item in myDeserializedObject.operations)
            {
                switch(item.description)
                {
                    case "Generate Plan":
                        var gen_plan=JObject.Parse(responseMessage1)["operations"];
                        string[] gen_plan_list_operationID =gen_plan.Select(o => (string) o["id"]).ToArray();
                        JObject[] gen_plan_list_payload = gen_plan.Select(o => (JObject) o["com_cumulocity_model"]).ToArray();
                        break;

                    case "Stop Station":
                        var stop_st=JObject.Parse(responseMessage1)["operations"];
                        string[] stop_st_list_operationID =stop_st.Select(o => (string) o["id"]).ToArray();
                        JObject[] stop_st_list_payload = stop_st.Select(o => (JObject) o["com_cumulocity_model"]).ToArray();

                        var httpClientStopStation = httpClientFactory.CreateClient("executeOperations");
                        var request4 = await httpClientStopStation.PostAsync("");
                        break;
                }
            }
        }
    }
}

private static void ConfigureServices(ServiceCollection services)
{

    services.AddHttpClient("getOperations", options =>
    {
        options.BaseAddress = new Uri("https://myurl.com?deviceId=43432103");

        options.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic","auth value");
    });

    services.AddHttpClient("executeOperations", options =>
    {
        options.BaseAddress = new Uri("https://myurl.com/"+operationID);
        options.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic","auth value");
        options.DefaultRequestHeaders.Add("Accept", "application/vnd.com.nsn.xyz.operation+json");
    });
    
}
public class RootObject
{
    public List<operation> operations { get; set; }
}
public class operation
{
    public golfController com_cumulocity_model { get; set; }
    public string description {get; set;}
}
public class golfController
{
    public int mode { get; set; }
    public string StopStationPayload { get; set; }
}
}
}

问题#1

在switch case中,我想获取com_cumulocity_modelid的值,这两个值属于满足case(value\u of\u description)的同一个JSON对象.

问题#2

我们如何将上面讨论过的id = "121985465"这个值添加到第var httpClientStopStation = httpClientFactory.CreateClient("executeOperations"); var request4 = await httpClientStopStation.PostAsync("");case("Stop Station")内的第h个url的末尾,以发出PostAsync请求?

推荐答案

短距离.如果您只需要com\U cumulocity\U模型

var operations = JObject.Parse(json)["operations"];

var com_cumulocity_model = operations.Where(o => (string) o["description"] == "Stop Station")
.Select(o => o["com_cumulocity_model"])
.FirstOrDefault();

Console.WriteLine(com_cumulocity_model.ToString());

后果

{
  "Mode": 0,
  "StopStationPayload": "[{\"ControllerAddress\":11,\"StationAddress\":26}]"
}

但如果需要全部数据,可以使用此代码反序列化json.

var data = JsonConvert.DeserializeObject<Data>(json);

类别

public class Data
{
    public List<Operation> operations { get; set; }
    public Statistics statistics { get; set; }
}
public class Operation
{
    public DateTime creationTime { get; set; }
    public string deviceId { get; set; }
    public string deviceName { get; set; }
    public string status { get; set; }
    public ComCumulocityModel com_cumulocity_model { get; set; }
    public string description { get; set; }
}
public class ComCumulocityModel
{
    public string op { get; set; }
    public string param { get; set; }
    public string value { get; set; }
    public int? Mode { get; set; }
    public string StopStationPayload { get; set; }
}

public class Statistics
{
    public int currentPage { get; set; }
    public int pageSize { get; set; }
}

如果不需要,可以从数据中删除Statistics类和Statistics属性.其他属性也是如此

例如,现在可以使用Linq获取任何数据

ComCumulocityModel com_cumulocity_model = data.operations
.Where(o => o.description == "Stop Station")
.Select(o => o.com_cumulocity_model)
.FirstOrDefault();

后果 (in json format)

{
  "Mode": 0,
  "StopStationPayload": "[{\"ControllerAddress\":11,\"StationAddress\":26}]"
}

如何打印

    var jsonSettings = new JsonSerializerSettings
    {
        NullValueHandling = NullValueHandling.Ignore,
        Formatting=Newtonsoft.Json.Formatting.Indented
    };
    Console.WriteLine(JsonConvert.SerializeObject(  com_cumulocity_model,  jsonSettings));

Csharp相关问答推荐

System.Text.Json:反序列化返回为空数组的字典时出错

在2D数组中绘制椭圆

.NET通过版本自动增量设置包版本

Dapper是否可以自动扩展类成员

CS0103 dlibdotnet和www.example.com facerect不在上下文中

处理. netstandard2.0项目中HttpClient.SslProtocol的PlatformNotSupportedException问题""

. NET WireMock拒绝PostAsJsonAsync序列化

实体框架核心上是否支持使用NPGSQL的字符串聚合?

使用HttpResponseMessage中的嵌套列表初始化JSON

Blazor在FluentButton onClick事件上设置参数

Cosmos SDK和Newtonsoft对静态只读记录的可能Mutations

如何在Cosmos SDK中控制超时、重试和重试之间的延迟?

如何比较C#中的L和ł(波兰字符)返回TRUE

为什么Docker中没有转发该端口?

Azure Functions v4中的Serilog控制台主题

Blazor服务器项目中的Blazor/.NET 8/Web API不工作

将J数组转换为列表,只保留一个嵌套的JToken

如何在C#中从MongoDB IPipelineStageDefinition中获取聚合命令的字段/选项?

在C#/ASP.NET Core 7中,什么可能导致POST请求作为GET请求发送

如何在.NET MAUI上在iOS和Mac之间共享代码?(no条件编译和无代码重复)