【问题标题】:How to convert any JSON object to C# object如何将任何 JSON 对象转换为 C# 对象
【发布时间】: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。根据经验,您应该通过一个小代码示例提出问题,以便人们可以帮助您找出缺少的内容。

标签: c# json asp.net-core


【解决方案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 的简单方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-23
    • 2016-04-24
    • 1970-01-01
    • 2018-03-16
    • 2011-01-15
    • 2023-03-17
    • 2018-02-27
    相关资源
    最近更新 更多