簡體   English   中英

如何將動態 JSON 轉換為 C# object

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

我正在嘗試將 JSON object 以下轉換為 C# ZA2F2ED4F8EBC2CBB4C21A29DC40AB61Z。 我可以獲得等效於filter的 C# ,但不適用於sort

過濾器JSON object 的情況下; 或者,openCondition等是static。 因此,我可以生成 C# class。

但是對於排序JSON object; accountNametradeDate不是 static。 這些字段完全按照用戶要求。 它們可能會隨着某些其他輸入的某些其他字段而更改。 因此,我不明白如何為這種類型的 JSON ZA8CFDE6331BD49EB2AC96F89111 誰能建議我如何做到這一點?

{
    "filter": [
        {
            "andOr": "",
            "openCondition": false,
            "columnName": "accountName",
            "operator": "eq",
            "value": "KATHERINE",
            "closeCondition": false
        }
    ],
    "sort": {
            "accountName": "asc",
            "tradeDate": "desc"       
    },
    "pageIndex": 1,
    "pageSize": 75
}

我嘗試創建如下所示的SortCriteria class。 但是,它與 JSON 排序 object 不匹配。

public class SortCriteria
{
    public string ColumnName { get; set; }
    public string SortOrder { get; set; }
}

誰能建議我如何解決這個問題。

對於屬性不固定的情況,例如在Sort中,您可以使用Dictionary (使用JsonExtensionDataAttribute )。 例如,

public class Filter
{
    public string andOr { get; set; }
    public bool openCondition { get; set; }
    public string columnName { get; set; }
    public string @operator { get; set; }
    public string value { get; set; }
    public bool closeCondition { get; set; }
}

public class Sort
{
    [JsonExtensionData]
    public Dictionary<string,object> RandomKeyValuePair {get;set;}
}

public class RootObject
{
    public List<Filter> filter { get; set; }
    public Sort sort { get; set; }
    public int pageIndex { get; set; }
    public int pageSize { get; set; }
}

樣品 Output

在此處輸入圖像描述

如果您的 json 屬性不固定並且它可能會隨着時間的推移而改變,那么您可以使用dynamic代替創建單獨的 class 。

喜歡,

string jsonString = @"{
    sort: {
      accountName: 'asc',
      tradeDate: 'desc'       
    }
}";


JObject obj = JObject.Parse(jsonString);
Console.WriteLine($"AccountNumber: {obj["sort"]["accountName"]}");

使用 Json 路徑,

Console.WriteLine($"AccountNumber: {obj.SelectToken("$.sort.accountName")}");

.Net 小提琴

您可以將任何 JSON object 反序列化為Dictionary<string,object>或者如果您知道值類型,則可以使用該值類型而不是object

在這種情況下,排序值只會是"asc""desc" ,因此我們可以使用string或(更好) enum

public enum SortDirection
{
    Asc,
    Desc,
}

class 看起來像

public class Data
{
    ...
    [JsonProperty( "sort" )]
    public Dictionary<string,SortDirection> Sort { get; set; }
    ...
}

一個最小的例子

var json = "{\"sort\":{\"accountName\":\"asc\",\"tradeDate\":\"desc\"}}";
var obj = JsonConvert.DeserializeObject<Data>(json);

.net 小提琴示例

如何轉換列表<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.

相關問題 如何將動態對象轉換為JSON字符串C#? 如何將C#對象轉換為JSON對象 如何將 JSON 響應對象(具有動態對象)轉換為 C# 類或可用的結果對象 C#Json將任何動態對象轉換為鍵值對 如何在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> 如何使用C#將JSON轉換為對象
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM