如何将任何 JSON 对象转换为 C# 对象

Posted

技术标签:

【中文标题】如何将任何 JSON 对象转换为 C# 对象【英文标题】:How to convert any JSON object to C# object 【发布时间】:2022-01-24 04:52:58 【问题描述】:

我有几个不同的 JSON 对象。

拳头 JSON 对象


    "api": 
    "NAME":"CUSTOMER_CREATE",
    "QUERY":"CUSTOMER_CREATE"
 ,
 "header" : 
    "PartyNumber": "1488002",
    "OrganizationName": "Test Organization-02",
    "RawPhoneNumber": "9199199199",
    "PartyUsageCode": "EXTERNAL_LEGAL_ENTITY",
    "Address": [

    "AddressType": "BILL_TO",
    "Address1": "77 College Rd",
    "Address2": "London NW10 5SE",
    "Address3": "London NW10 5SF",
    "Address4": "London NW10 5SG",
    "City": "London",
    "Country": "GB",
    "PostalCode": "NW10 5ES"

第二个 JSON 对象

 "api": 
        "NAME":"ITEM_CREATE",
        "QUERY":"ITEM_CREATE"
     ,
"header" : 

"OrganizationCode": "IM_MASTER_ORG",
"ItemClass" : "Root Item Class",
"ItemNumber" : "TEST-01",
"ItemDescription" : "TEST-01",
"ItemStatusValue" : "Active",
"PrimaryUOMValue" : "Each",
"LifecyclePhaseValue" : "Production"

我也有很多这样的 JSON 对象。所有 JSON 对象都不相同。所以我想编写一个 C# 类来将这个任何 JSON 对象转换为 C# 对象。那么你能请我一堂课来转换这些 JSON 对象吗?

目前我正在使用这个类来转换 Json 对象。但我想把它做成一个动态类

public class MHScaleMessage 

    //public string api  get; set;
    public Dictionary<string, string> api  get; set;  = new Dictionary<string, string>();
    public Dictionary<string, string> header get; set;   = new Dictionary<string, string>();                 
    public List<Dictionary<string, string>> lineItems  get; set;  = new List<Dictionary<string, string>>();

    public static string GetValue(Dictionary<string, string> d, string key, string defaultVal="") 
        if (key == null) return defaultVal;
        return d.TryGetValue(key, out string val) ? val : defaultVal;
    

    public static int GetValueAsInt(Dictionary<string, string> d, string key, int defaultVal=0) 
        if (key == null) return defaultVal;
        string val = d.TryGetValue(key, out val) ? val : null;
        if (val == null) return defaultVal;
        return int.TryParse(val, out _) ? 0 : defaultVal;
    

    public string ToJsonString() 
        var options = new JsonSerializerOptions
        
            WriteIndented = true,
            IgnoreNullValues = true
        ;
        return System.Text.Encoding.UTF8.GetString(JsonSerializer.SerializeToUtf8Bytes(this, options));
    
    
    public  string _ToString() 
        string s="";
        s += ""; s += "\n";
        s += "api = " + api; s += ","; s += "\n";
        s += "header ="; s += "\n";
        s += "";
        header.ToList().ForEach(x => s += x.Key + " = " + x.Value + "\n");
        s += ""; s += ","; s += "\n";
        s += "lineItems"; s += "\n";
        s += ""; s += "[";
        lineItems.ForEach(x => 
            x.ToList().ForEach(y => 
                s += y.Key + " = " + y.Value; 
                s += ","; s += "\n";
            
            );
        );
        s += "]";  s += ""; s += "\n";
        s += "";
        return s;
           

之后我使用以下方法来执行 API。这个方法我可以传参数。

  private static MHScaleMessage PerformAPIFunction(MHScaleMessage requestObj)
    

【问题讨论】:

你可能想看看newtonsoft.com/json。根据经验,您应该通过一个小代码示例提出问题,以便人们可以帮助您找出缺少的内容。 【参考方案1】:

有多种方法可以将 JSON 对象转换为 C# 尖锐对象,这里我将展示几种方法。

一行代码

var oMycustomclassname = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(jsonString);

如果您有自己的班级,请将var 更改为您自己的班级。

使用 JSON.NET

有一种将 JSON 转换为 C# 对象的推荐方法,即JSON.NET 查看 github 存储库以获取更多信息。这是您的案例的示例。

public class User

public User(string json)

    JObject jObject = JObject.Parse(json);
    JToken jUser = jObject["api"];
    name = (string) jUser["NAME"];
    query = (string) jUser["QUERY"];
    JToken jUser1 = jObject["header"];
    OrganizationCode = (string) jUser1["OrganizationCode"];
    ItemClass = (string) jUser1["ItemClass"];
    ItemNumber = jUser1["ItemNumber"];


public string api_Name get; set; 
public string api_Query  get; set; 
public string header_OrganizationCode get; set; 
public string header_ItemClass get; set; 


// Use
private void Run()

string json = @""api": 
    "NAME":"ITEM_CREATE",
    "QUERY":"ITEM_CREATE"
 ,
"header" : 

"OrganizationCode": "IM_MASTER_ORG",
"ItemClass" : "Root Item Class",
"ItemNumber" : "TEST-01",
"ItemDescription" : "TEST-01",
"ItemStatusValue" : "Active",
"PrimaryUOMValue" : "Each",
"LifecyclePhaseValue" : "Production"
 ";
User user = new User(json);

Console.WriteLine("Name : " + user.name);
Console.WriteLine("Teamname : " + user.teamname);
Console.WriteLine("Email : " + user.email);
Console.WriteLine("Players:");

foreach (var player in user.players)
    Console.WriteLine(player);

【讨论】:

如何使用上述类转换为所有 JSON 对象。我有关于将 JSON 转换为 C# 的当前类的更新问题。您能否将该课程更新为动态课程。那么我不想提及上面的任何事情。自动将 Json 转换为 C# 对象。然后我可以使用那个参数【参考方案2】:

您可以使用 Newtonsoft.Json 库轻松获得您的要求。我正在写下面的一个例子,看看它。

您收到的对象类型的类:

public class Student
 
   public int ID  get; set; 
   public string Name  get; set; 
 

代码:

static void Main(string[] args)
 
   string json = "\"ID\": 1, \"Name\": \"Abdullah\"";
   Student student = JsonConvert.DeserializeObject<User>(json);

   Console.ReadKey();
 

解析 json 的简单方法。

【讨论】:

以上是关于如何将任何 JSON 对象转换为 C# 对象的主要内容,如果未能解决你的问题,请参考以下文章

C# 将任意对象快速转换为Json

如何将 c# 二维数组转换为 JSON 对象?

php如何将json对象转字符串

如何将 C# 类对象转换为 json? [复制]

如何将弱类型 JSON 转换为 C# 可读对象

如何将 javascript 对象转换成 json字符串