[英]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.