簡體   English   中英

如何將 Enum 轉換為 Json object 和 C# 中的 Header

[英]How to convert Enum to Json object with Header in C#

這是我到目前為止所做的

public enum TCountryNames
{
  [Display(Name="America")]
  cnUSA = 1,
  [Display(Name="England")]
  cnUK,
  [Display(Name="CHINA")]
  cnCHN
}

public class MyClass
{
  public static List<KeyValuePair<string, int>> GetEnumList()
    {
        var list = new List<KeyValuePair<string, int>>();
        foreach (var e in Enum.GetValues(typeof(TCountryNames)))
        {
            list.Add(new KeyValuePair<string, int>(e.ToString(), (int)e));
        }
        return list;
    }
}

結果:[cnUSA,1] 總計數為 3,沒有 header

我想要的結果是 [{"Id":1,"Name":"America"},{"Id":2,"Name":"England"}]

我試過 [JsonConverter(typeof(StringEnumConverter))] public TCountryNames Names{ get; 放; }

我也試過將枚舉轉換為數組列表 var names = Enum.GetValues(typeof(TCountryNames)); ArrayList arrLst = new ArrayList() { 名稱 }; 但他們兩個似乎都沒有工作。

*任何幫助將不勝感激。 先感謝您。 *

  1. 如果你不想添加新的 class

     public static List<Dictionary<string, object>> GetEnumList() { var list = new List<Dictionary<string, object>>(); foreach (var e in Enum.GetValues(typeof(TCountryNames))) { list.Add(new Dictionary<string, object> { { "Id", (int)e }, { "Name", e.ToString() } }); } return list; }
  2. 定義一個model用於序列化

     public class EnumData { public int Id { get; set; } public string Name { get; set; } } public static List<EnumData> GetEnumList() { var list = new List<EnumData>(); foreach (var e in Enum.GetValues(typeof(TCountryNames))) { list.Add(new EnumData { Id = (int)e, Name = e.ToString() }); } return list; }

要獲取顯示名稱值,您應該使用 System.Reflection。 然后你可以用簡單的方式做到這一點:

   public enum TCountryNames
    {
        [Display(Name = "America")]
        cnUSA = 1,
        [Display(Name = "England")]
        cnUK,
        [Display(Name = "CHINA")]
        cnCHN
    }

public class EnumData
{
    public int Id { get; set; }
    public string? Name { get; set; }
}

public class MyClass
{
    public static List<EnumData> GetEnumList()
    {
        var list = new List<EnumData>();
        foreach (var e in Enum.GetValues(typeof(TCountryNames)))
        {
            list.Add(new EnumData
            { 
                Id = (int)e, 
                Name = e.GetType()
                    .GetMember(e.ToString())
                    .First()?
                    .GetCustomAttribute<DisplayAttribute>()?
                    .GetName()
            });
        }
        return list;
    }
}

所以要澄清:

  • 你為每個枚舉創建循環
  • 通過鑄造獲取 id
  • 使用反射取名 - 我添加了所有需要的保護以防止 null 異常

Output: [ { "Id": 1, "Name": "America" }, { "Id": 2, "Name": "England" }, { "Id": 3, "Name": "CHINA" } ]

示例: https://do.netfiddle.net/XVL2LI

如何轉換列表<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# 如何將C#對象轉換為JSON對象 使用 Newtonsoft C# 從 json 轉換為 Enum 如何在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轉換為對象 如何在C#中將json數據轉換為對象?
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM