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