簡體   English   中英

C# Newtonsoft Json 不使用枚舉鍵序列化資源

[英]C# Newtonsoft Json doesn't serialize a resource with the enum key

為什么我們在序列化響應中看不到枚舉鍵? 它僅適用於字典中的鍵。

TestMethod]
public void TestMethod5()
{
    string response = "{\"risk\":\"LOW\",\"topics\":{\"CAT\":\"LOW\",\"LION\":\"HIGH\"}}";
    Resource deserializedResource = JsonConvert.DeserializeObject<Resource>(response);
    string serializedResource = JsonConvert.SerializeObject(deserializedResource);

    Console.WriteLine(serializedResource); 
    // actual        = {"risk":10,"topics":{"CAT":10,"LION":30}}
    // expectation_1 = {"risk":LOW,"topics":{"CAT":LOW,"LION":HIGH}} OR
    // expectation_2 = {"risk":10,"topics":{"0":10,"2":30}}
}
// sample resource and enums
public class Resource
{
    [JsonProperty("risk")]
    public Risk RiskFactor { get; set; }
    [JsonProperty("topics")]
    public IDictionary<Animal, Risk> Animals { get; set; }
}
public enum Risk
{
    LOW = 10,
    MEDIUM = 20,
    HIGH = 30
}
public enum Animal
{
    CAT = 0,
    BULL = 1,
    LION = 2
}

在風險枚舉上附加[JsonConverter(typeof(StringEnumConverter))]以獲得所需的 output

代碼:

using System;
using System.Collections.Generic;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
                    
public class Program
{
    public static void Main()
    {
        string response = "{\"risk\":\"LOW\",\"topics\":{\"CAT\":\"LOW\",\"LION\":\"HIGH\"}}";
        Resource deserializedResource = JsonConvert.DeserializeObject<Resource>(response);
        string serializedResource = JsonConvert.SerializeObject(deserializedResource);

        Console.WriteLine(serializedResource); 
    }
}

public class Resource
{
    [JsonProperty("risk")]
    public Risk RiskFactor { get; set; }
    [JsonProperty("topics")]
    public IDictionary<Animal, Risk> Animals { get; set; }
}

[JsonConverter(typeof(StringEnumConverter))]  
public enum Risk
{
    LOW = 10,
    MEDIUM = 20,
    HIGH = 30
}
public enum Animal
{
    CAT = 0,
    BULL = 1,
    LION = 2
}

以上返回預期的 output

{"risk":"LOW","topics":{"CAT":"LOW","LION":"HIGH"}}

檢查這個 dotnet fiddle - https://dotnetfiddle.net/wIxRf4

暫無
暫無

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM