![](/img/trans.png)
[英]C# - Deserialize JSON string to Enum[] using DataContractJsonSerializer
[英]Deserialize Json string to Enum C#
我正在对stringEnumConverter的自定义版本编写测试。 但是当我反序列化时,我的测试一直在抛出。 我搜索了堆栈溢出,但是找不到我做错了什么。 以下是我在做什么的一个示例:
namespace ConsoleApp2
{
[Flags]
[JsonConverter(typeof(StringEnumConverter))]
enum TestEnum
{
none = 0,
obj1 = 1,
obj2 = 2
}
class Program
{
static void Main(string[] args)
{
var jsonString = "{none}";
var deserializedObject = JsonConvert.DeserializeObject<TestEnum>(jsonString);
}
}
}
解析枚举时,我在反序列化行上遇到的异常是意外令牌StartObject。
我怀疑这可能是因为我表示的json字符串错误,我也尝试了"{\\"none\\"}", "{\\"TestEnum\\":\\"none\\"}", "{TestEnum:none}", "{none}" and "none"
。
{none}不是有效的JSON,但'none'是有效的!
您应该尝试以下方法:
public class Program
{
public static void Main()
{
Console.WriteLine("Hello World");
var jsonString = "'none'";
var deserializedObject = JsonConvert.DeserializeObject<TestEnum>(jsonString);
Console.WriteLine(deserializedObject);
}
}
干杯!
如果将TestEnum.none
序列化为JSON,则结果为"none"
。 字符串是完全有效的JSON。
您的JSON甚至不是有效的 JSON:*它是一个对象,*包含密钥(但密钥必须用双引号引起来),*不携带任何值。 (并且对象键必须具有值)
所以...尝试这样的事情:
var jsonString = "\"none\"";
var deserializedObject = JsonConvert.DeserializeObject<TestEnum>(jsonString);
但是您不必编写自定义序列化程序。 JSON.Net将为您做到这一点。 看到
但是,如果要反序列化包含枚举的对象,则需要遵循以下原则:
{
"enumKey" : "none"
}
在您的测试中可能是这样的:
var jsonString = "{ \"enumKey\" : \"none\" }";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.