簡體   English   中英

如何將任何 JSON object 轉換為 C# object

[英]How to convert any JSON object to C# object

我有幾個不同的 JSON 對象。

拳頭JSON object

{
    "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 object

 "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 object 都不相同。 So I want to write One C# class for convert this any JSON object to C# Object. 所以你能請我一個 class 來轉換這些 JSON object。

目前我正在使用這個 class 來轉換 Json object。 但我想把它做成動態的 class

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)
    {}

有多種方法可以將 JSON object 轉換為 C# 尖銳的 ZA8CFDE6331BD59EB2AC96F8911ZC46 方法,我將在這里展示幾種方法。

一行代碼

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

如果您有自己的 class,則將var更改為您自己的 class。

使用JSON.NET

There is a recommended way to convert JSON to C# object and that is JSON.NET Have a look at the github repo to get more information. 這是您的案例的示例。

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 = @"{""user"": 
{""name"":""asdf"",""teamname"":""b"",""email"":""c"",""players"":[""1"",""2""]}}";
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);
}

您可以使用 Newtonsoft.Json 庫輕松滿足您的要求。 我正在寫下下面的一個例子,看看它。

Class 對於您收到的 object 類型:

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 的簡單方法。

如何轉換列表<object>至 Json | C#<div id="text_translate"><p> 我有一個由對象組成的列表,每個 object 有 5 個數據。 我需要將該列表轉換為 json,但使用序列化它會填滿空的 json。</p><p> 有誰知道我可能做錯了什么?</p><pre> foreach (DataRow dtRow in dtAlarmas.Rows) { String Name = dtRow["Name"].ToString(); String ID = dtRow["ID"].ToString(); String AlarmText = dtRow["AlarmText"].ToString(); String AlarmTimeNoNula = dtRow["AlarmTimeNoNula"].ToString(); lstAlarmasNoTratadas.Add(new Ondoan.DatosAux.Alarmas.AlarmaNoTratadaModel(dtRow["Name"].ToString(), Convert.ToInt32(dtRow["ID"]), dtRow["Class"].ToString(), dtRow["AlarmText"].ToString(), dtRow["AlarmTimeNoNula"].ToString())); } string sParams = JsonConvert.SerializeObject(lstAlarmasNoTratadas);</pre><p> 轉換后的 sParams 值 = "[{}]"</p><p> Class Ondoan.DatosAux.Alarmas.AlarmaNoTratadaModel</p><pre> using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Ondoan.DatosAux.Alarmas { public class AlarmaNoTratadaModel { private string Name; private int ID; private string Class; private string AlarmText; private string AlarmaTimeNoNula; public AlarmaNoTratadaModel(string Name, int ID, string Class, string AlarmText, string AlarmaTimeNoNula) { // TODO: Complete member initialization this.Name = Name; this.ID = ID; this.Class = Class; this.AlarmText = AlarmText; this.AlarmaTimeNoNula = AlarmaTimeNoNula; } public class AlarmaNoTratadasModel { public AlarmaNoTratadasModel() { } public AlarmaNoTratadasModel(String Name, Nullable&lt;System.Int32&gt; ID, String Class, String AlarmText, String AlarmaTimeNoNula) { this.Name = Name; this.ID = ID; this.Class = Class; this.AlarmText = AlarmText; this.AlarmaTimeNoNula = AlarmaTimeNoNula.ToString(); } public System.String Name { get; set; } public Nullable&lt;System.Int32&gt; ID { get; set; } public System.String Class { get; set; } public System.String AlarmText { get; set; } public System.String AlarmaTimeNoNula { get; set; } } } }</pre></div></object>

[英]How to Convert List<Object> to Json | C#

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 c# - 如何在沒有任何模型或映射器的情況下將json轉換為對象 如何將C#對象轉換為JSON對象 如何使用C#將JSON轉換為對象 如何在C#中將json數據轉換為對象? 如何將 Json 轉換為 C# object? 如何在C#中將json字符串轉換為對象 如何將此json轉換為C#對象 如何在C#中將Json對象轉換為數組 如何將這個JSON到C#對象轉換 如何轉換列表<object>至 Json | C#<div id="text_translate"><p> 我有一個由對象組成的列表,每個 object 有 5 個數據。 我需要將該列表轉換為 json,但使用序列化它會填滿空的 json。</p><p> 有誰知道我可能做錯了什么?</p><pre> foreach (DataRow dtRow in dtAlarmas.Rows) { String Name = dtRow["Name"].ToString(); String ID = dtRow["ID"].ToString(); String AlarmText = dtRow["AlarmText"].ToString(); String AlarmTimeNoNula = dtRow["AlarmTimeNoNula"].ToString(); lstAlarmasNoTratadas.Add(new Ondoan.DatosAux.Alarmas.AlarmaNoTratadaModel(dtRow["Name"].ToString(), Convert.ToInt32(dtRow["ID"]), dtRow["Class"].ToString(), dtRow["AlarmText"].ToString(), dtRow["AlarmTimeNoNula"].ToString())); } string sParams = JsonConvert.SerializeObject(lstAlarmasNoTratadas);</pre><p> 轉換后的 sParams 值 = "[{}]"</p><p> Class Ondoan.DatosAux.Alarmas.AlarmaNoTratadaModel</p><pre> using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Ondoan.DatosAux.Alarmas { public class AlarmaNoTratadaModel { private string Name; private int ID; private string Class; private string AlarmText; private string AlarmaTimeNoNula; public AlarmaNoTratadaModel(string Name, int ID, string Class, string AlarmText, string AlarmaTimeNoNula) { // TODO: Complete member initialization this.Name = Name; this.ID = ID; this.Class = Class; this.AlarmText = AlarmText; this.AlarmaTimeNoNula = AlarmaTimeNoNula; } public class AlarmaNoTratadasModel { public AlarmaNoTratadasModel() { } public AlarmaNoTratadasModel(String Name, Nullable&lt;System.Int32&gt; ID, String Class, String AlarmText, String AlarmaTimeNoNula) { this.Name = Name; this.ID = ID; this.Class = Class; this.AlarmText = AlarmText; this.AlarmaTimeNoNula = AlarmaTimeNoNula.ToString(); } public System.String Name { get; set; } public Nullable&lt;System.Int32&gt; ID { get; set; } public System.String Class { get; set; } public System.String AlarmText { get; set; } public System.String AlarmaTimeNoNula { get; set; } } } }</pre></div></object>
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM