将动态json模型转换为c#对象[重复]

Posted

技术标签:

【中文标题】将动态json模型转换为c#对象[重复]【英文标题】:converting dynamic json model to c# object [duplicate] 【发布时间】:2021-10-24 22:29:58 【问题描述】:

我正在做一个 .net 项目。我需要将 json 模型(已动态更改数字节点名称)转换为 csharp 类。第二个节点的名称是动态变化的,这就是为什么我不能像这样写一个 jsonproperty:[JsonProperty("353503")]。我没有看到这样的 json 模型。我尝试了很多东西,但无法实现。我该怎么办?


  "standings": 
    "353493": 
      "id": "353493",
      "name": "root name",
      "n": "0",
      "ut": "2021-08-23T20:54:12+00:00",
      "standing_participants": 
        "4273616": 
          "id": "4273616",
          "n": "14",
          "ut": "2021-08-23T20:54:11+00:00",
          "rank": "1",
          "standing_data": [
            
              "id": "146906199",
              "standing_type_paramFK": "1",
              "value": "6",
              "code": "points",
              "n": "2",
              "ut": "2021-08-23T20:54:11+00:00",
              "sub_param": ""
            ,
            
              "id": "146906200",
              "standing_type_paramFK": "2",
              "value": "8",
              "code": "goalsfor",
              "n": "2",
              "ut": "2021-08-23T20:54:11+00:00",
              "sub_param": ""
            
          ]
        ,
        "4273617": 
          "id": "4273617",
          "n": "14",
          "ut": "2021-08-23T20:54:11+00:00",
          "rank": "2",
          "standing_data": [
            
              "id": "146906198",
              "standing_type_paramFK": "1",
              "value": "6",
              "code": "points",
              "n": "2",
              "ut": "2021-08-23T20:54:11+00:00",
              "sub_param": ""
            ,
            
              "id": "146906201",
              "standing_type_paramFK": "2",
              "value": "8",
              "code": "goalsfor",
              "n": "2",
              "ut": "2021-08-23T20:54:11+00:00",
              "sub_param": ""
            
          ]
        
      
    
  

当我尝试这个时,它可以工作

 public partial class SampleStandingModel
    
        [JsonProperty("standings")]
        public Standings Standings  get; set; 
    

    public partial class Standings
    
        [JsonProperty("353493")]
         public Standing Standing  get; set; 
    

但是当我删除 [JsonProperty("353493")] 行时,它不起作用

 public partial class SampleStandingModel
    
        [JsonProperty("standings")]
        public Standings Standings  get; set; 
    

    public partial class Standings
    
        
         public Standing Standing  get; set; 
 //or this:
 //   public Dictionary<int, Standing> Standing  get; set; 
    
    

我的 json 解析代码如下:

var deserializedObject = Newtonsoft.Json.JsonConvert.DeserializeObject(json);

我的问题的重点,第二个节点(站立-> 353493)名称是数字和动态的。

我之前标记的问题已回答,但没有相同的问题。较早的问题与动态类型或对象有关。这个关于数字和动态节点名称的问题。两天没找到解决办法。

【问题讨论】:

你可能想deserialize to a Dictionary<int, Standing>。 【参考方案1】:

您可以尝试使用Json.Net 将其转换为动态对象:

dynamic stuff = JsonConvert.DeserializeObject(" 'Name': 'Jon Doe' ");

或使用Newtonsoft.Json.Linq:

dynamic stuff = JObject.Parse(" 'Name': 'Jon Doe' ");

此外,您可以尝试将其转换为Dictionary&lt;string, string[]&gt;JsonSerializer.Deserialize&lt;Dictionary&lt;string,string[]&gt;&gt;(body, serializerOptions);

【讨论】:

欲了解更多信息,请查看此主题:***.com/questions/3142495/… 我看到的问题是,即使对象被反序列化,OP 也无法访问任何这些属性,因为它们的名称不是常量。 我发现可能与接受的答案重复:***.com/questions/65700331/…(我写在这里,因为我没有足够的声誉来评论这个问题)

以上是关于将动态json模型转换为c#对象[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在C#中将对象转换为JSON字符串[重复]

如何将模型对象转换为 JSON - Swift 4

将 XML 转换为 C# 类的工具 [重复]

如何为three.js模型加载器将对象转换为json文件

Angular:Typescript 将 JSON 响应转换为对象模型不起作用

使用 Json.Net 将 int 转换为 bool [重复]