在 JSON (C#) 中序列化枚举值 [重复]
Posted
技术标签:
【中文标题】在 JSON (C#) 中序列化枚举值 [重复]【英文标题】:Serializing enum values in JSON (C#) [duplicate] 【发布时间】:2011-12-18 20:51:47 【问题描述】:可能重复:JSON serialization of c# enum as string
我有两个类如下:
Transaction
int OrderNumber
// ... snip ...
IEnumerable<Item> Items
Item
string Sku
// ... snip ...
ItemCategory Category
ItemCategory 是一个如下所示的枚举:
[DataContract]
public enum ItemCategory
[EnumMember(Value = "Category1")]
Category1,
[EnumMember(Value = "Category2")]
Category2
我的两个类根据需要使用 DataContract 和 DataMember 属性进行装饰。
我正在尝试获取 Transaction 项的 JSON 表示。在 Transaction 中,我有一个如下所示的公共方法:
public string GetJsonRepresentation()
string jsonRepresentation = string.Empty;
DataContractJsonSerializer serializer = new DataContractJsonSerializer(this.GetType());
using (MemoryStream memoryStream = new MemoryStream())
serializer.WriteObject(memoryStream, this);
jsonRepresentation = Encoding.Default.GetString(memoryStream.ToArray());
return jsonRepresentation;
这将返回一个如下所示的字符串:
"OrderNumber":123,
"Items":["SKU": "SKU1","Category": 0]
这就是我想要的,除了每个 Item 的“Category”枚举值被序列化为其整数值,而不是我在 EnumMember 属性中指定的值。我怎样才能让返回的 JSON 看起来像 "Category": "Category1" 而不是 "Category": 0?
【问题讨论】:
【参考方案1】:请查看堆栈溢出中的JSON serialization of enum as string。 不,没有可以使用的特殊属性。 javascriptSerializer 将枚举序列化为它们的数值而不是它们的字符串表示。您需要使用自定义序列化将枚举序列化为其名称而不是数值。
【讨论】:
不正确,使用 StringEnumConverter。如果您只希望它是单个实例中的字符串,请使用装饰器指定它,或者在序列化程序设置中包含转换器以将枚举全局转换为字符串,反之亦然 @wallacer @DeveloperX 实际上是正确的。StringEnumConverter
是 Json.Net 属性,在基础 .Net 中不可用
@LukeMarlin 啊,好的。感谢您的澄清!以上是关于在 JSON (C#) 中序列化枚举值 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
C# JSON 反序列化:如何从 JSON 对象数组中获取值 [重复]