这里有一个新手在C#中使用JSON.Net-
string JSONOutput = (JsonConvert.SerializeObject(product));
字符串
当我在我的解决方案中序列化Product
对象时,我得到的JSON看起来像这样:
{
"product":{
"displayStatus":1,
"drugClass":1,
"drugType":1
}
}
型displayStatus
、drugClass
和drugType
值都来自Enum
s,所以我真正想要的输出是这样的:
{
"product":{
"displayStatus":{
"name":"Visible",
"value":1
},
"drugClass":{
"name":"Generic",
"value":1
},
"drugType":{
"name":"Drug",
"value":1
}
}
}
型
有人知道如何做到这一点吗?我一直在看StringEnumConverter
,但我唯一能看到的是,它只是返回Enum
的字符串,而不是整数值-而我希望两者都有。
2条答案
按热度按时间ryevplcw1#
您可以使用
JsonConverter<T>
,如下所示:字符串
T
限制为System.Enum
WriteJson
中,我创建了一个匿名类型,并使用Enum Format strings检索所需的值JObject
,因为JsonWriter
不直接支持它然后,可以使用以下属性修饰模型类:
型
最后,序列化逻辑看起来像这样:
型
result
看起来像这样:型
为了固定
Name
和Value
的 shell ,您需要做的就是将serializer
传递给FromObject
:型
在此之后,最终结果将与预期相同:
型
UDPATE #1:将转换器添加到设置
正如注解中所指出的,
Product
类不能用JsonConverterAttribute
s修改。所以,如果你有这个限制,那么你可以通过JsonSettings
对象传递转换器来克服这个限制,就像这样:型
使用这种方法,您的模型将是无序列化属性的:)
g52tjvyc2#
注意,你不应该真的需要这样的东西,有几种开箱即用的方法来转换 * 枚举 *。例如
StringEnumConverter
。例如字符串
然而,纯粹出于病态的好奇心和学术兴趣
给定转换器
型
枚举
型
和类
型
用法
型
输出
型