为 json 字符串创建 c# 类,其中有数字作为对象中的变量

Posted

技术标签:

【中文标题】为 json 字符串创建 c# 类,其中有数字作为对象中的变量【英文标题】:create c# class for json string which have number as variables in object 【发布时间】:2020-09-30 06:53:34 【问题描述】:

我必须将以下 JSON 格式传递给 REST api

 "weconnect_validate":
                "Row":[
                    "0":"44063fe6-fe22-11ea-bb30-005056923098::TEST10800::9888880470","1":"TEST10800"
                    ]
            

现在这里发生的问题是我如何创建类

变量名称为 0 和 1 的行。

我已尝试关注

public class BasicRow

    [JsonProperty("0")]
    public string Zero  get; set; 
    [JsonProperty("1")]
    public string One  get; set; 

public class Weconnect_Validate

    
    public BasicRow[] rows  get; set; 

但它不起作用。在调试模式下它正在通过

Row:["Zero":......

请提出一些技巧或不同的方法来创建 c# 类。

编辑

以下 json 对象我需要使用 http 客户端发送到 REST api。

"PWSESSIONRS":"PWPROCEs-s-rS":"PWDATA":"weconnect_validate":"Row":["0":"dc9a2d38-fe28-11ea-bb30-005056923098","1":"TEST10800"],"PWHEADER":"LOGIN_ID":"TEST10800","ORG_ID":"HSA","APP_ID":"HSA","IN_PROCESS_ID":"1","OUT_PROCESS_ID":"weconnect_validate"

我的问题是如何为这种类型的 json 字符串或对象构建 c# 类。

【问题讨论】:

你是用Newtonsoft.Json反序列化的吗? 也许你可以使用 List>. 您应该走在正确的轨道上。请提供一个完整的例子来说明什么不起作用。 ***.com/help/minimal-reproducible-example @TsahiAsher 我没有反序列化它。我必须使用 httpclient 发送到 REST api,所以我使用 javascript 序列化程序进行序列化。 @DavidStania 我刚刚在这里写了一个复杂的 json 对象的一部分。使用您的想法会导致复杂性。 【参考方案1】:

QuickType.io 提出了这个建议,鉴于您断言 JsonProperty 不起作用,我首先想到的是 (Array of Dictionary):

namespace SomeNamespaceHere

    using System;
    using System.Collections.Generic;

    using System.Globalization;
    using Newtonsoft.Json;
    using Newtonsoft.Json.Converters;

    public partial class RootClassNameHere
    
        [JsonProperty("weconnect_validate")]
        public WeconnectValidate WeconnectValidate  get; set; 
    

    public partial class WeconnectValidate
    
        [JsonProperty("Row")]
        public Dictionary<string, string>[] Row  get; set; 
    

    public partial class RootClassNameHere
    
        public static RootClassNameHere FromJson(string json) => JsonConvert.DeserializeObject<RootClassNameHere>(json, SomeNamespaceHere.Converter.Settings);
    

    public static class Serialize
    
        public static string ToJson(this RootClassNameHere self) => JsonConvert.SerializeObject(self, SomeNamespaceHere.Converter.Settings);
    

    internal static class Converter
    
        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
        
            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
            DateParseHandling = DateParseHandling.None,
            Converters =
            
                new IsoDateTimeConverter  DateTimeStyles = DateTimeStyles.AssumeUniversal 
            ,
        ;
    

但是使用您提出的路线我实际上并没有遇到任何问题:

使用此代码:

    public class Row
    
        [JsonProperty("0")]
        public string Zero  get; set; 
        [JsonProperty("1")]
        public string One  get; set;  
    

    
    public class WeconnectValidate
    
        public List<Row> Row  get; set; 
    

    public class Root
    
        [JsonProperty("weconnect_validate")]
        public WeconnectValidate WeconnectValidate  get; set; 
    

像这样使用:

        var x = JsonConvert.SerializeObject(new Root()
        
            WeconnectValidate = new WeconnectValidate()
            
                Row = new List<Row>()
                    new Row()  Zero = "a", One = "b" ,
                    new Row()  Zero = "c", One = "d" 
                    
            
        );

使用最新的 Newtonsoft.Json

【讨论】:

以上是关于为 json 字符串创建 c# 类,其中有数字作为对象中的变量的主要内容,如果未能解决你的问题,请参考以下文章

从 JSON Schema 生成 C# 类 [关闭]

C#中怎么解析JSON数据,并获取到其中的值?

C# 为班级设置特定的文化

JSON C# Class Generator ---由json字符串生成C#实体类的工具

C# URi 字符串太长,如何转换为 JSON raw [重复]

自定义类数组一次将值设置为两个元素