将动态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<string, string[]>
:
JsonSerializer.Deserialize<Dictionary<string,string[]>>(body, serializerOptions);
【讨论】:
欲了解更多信息,请查看此主题:***.com/questions/3142495/… 我看到的问题是,即使对象被反序列化,OP 也无法访问任何这些属性,因为它们的名称不是常量。 我发现可能与接受的答案重复:***.com/questions/65700331/…(我写在这里,因为我没有足够的声誉来评论这个问题)以上是关于将动态json模型转换为c#对象[重复]的主要内容,如果未能解决你的问题,请参考以下文章