首先,我通常知道如何将json反序列化为对象,但我对C#还是很陌生.

{
  "slot":0,
    "io":{
      "relay":{
        "4":{
          "relayStatus":1
        }
      }
    }
 }

我遇到的问题是在本例中的中继编号"4",因为对象中的数据名称是一个整数."4"可以是0到5之间的任何值.

我目前编写的是一个C#对象,我可以这样引用它..

继电器.Io.转发继电器4.RelayStatus

这没关系,但我希望能够这样引用它..

relayStatus[4]

这将是一个长度为6的数组,在位置4处包含"relayStatus"的值.

如果我问得不好,我很抱歉.如有需要,请随时询问更多解释.

推荐答案

试试这个,你可能需要添加一些验证,我不知道所有细节

   var relay =JObject.Parse(json)["io"]["relay"]
       .ToObject<Dictionary<string, JObject>>().First();

    var relayStatus = new int[6];
    var index = Convert.ToInt32(relay.Key);

    relayStatus[index] = (int) relay.Value["relayStatus"];

    var result = relayStatus[4];  // 1

但是,由于您只有一个中继状态属性,因此此代码更好

var relayStatus = RelayStatus(json);

public int RelayStatus(string json)
{
    var relay = JObject.Parse(json)["io"]["relay"]
       .ToObject<Dictionary<string, JObject>>().First();

    return (int)relay.Value["relayStatus"];
}

Csharp相关问答推荐

使用yaml将Azure函数代码部署到FunctionApp插槽时出现问题(zip未找到)

EF Core 8—应用客户端投影后无法转换集操作

程序集.加载从exe的异常

WPF Windows初始化正在锁定. Net 8中分离的线程

C#.NET依赖项注入顺序澄清

在C#中,有没有一种方法可以集中定义跨多个方法使用的XML参数描述符?

C#-从基类更新子类

如何将MongoDB序列化程序设置为内部对象属性

在C#中,将两个哈希集连接在一起的时间复杂度是多少?

使用Dapper映射联接查询对象数据到使用SplitOn;

如何在CSharp中将json字符串转换为DataTable?

Azure Functions v4中的Serilog控制台主题

如何在发布NuGet包之前设置命名空间?

System.NotSupportdException:流不支持读取

ASP.NET MVC数据批注验证组复选框

用MongoDB c#驱动程序删除和返回嵌套数组中的文档

我应该为C#12中的主构造函数参数创建私有属性吗?

如何使用.NET 8.0中新的CompositeFormat类?

将列表转换为带有逗号分隔字符串形式的值的字典

最小API定义的Swagger标头参数