繁体   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