枚举序列化 Json 与 XML

     2023-02-22     55

关键词:

【中文标题】枚举序列化 Json 与 XML【英文标题】:Enum Serialization Json vs XML 【发布时间】:2012-05-26 17:13:29 【问题描述】:

我的项目中有以下 Enum

public enum CameraAccessMethod

    Manual = 0,
    Panasonic = 1,
    Axis = 2,
    AirCam = 3

我有一个对象,它根据不同的场景被序列化为 json 或 XML,并且对象的属性之一是 CameraAccessMethod 类型。我遇到的问题是,当这个属性被序列化为 XML 时,它将给出枚举值(手动、松下、轴、Aircam)的字符串表示,但在 JSON 中它被序列化为数字值(0、1、2、3)。我怎样才能避免这种不一致?我也想要 JSON 序列化中的字符串。

【问题讨论】:

你是如何进行 JSON 序列化的?根据您使用的序列化程序,它可能有也可能没有将枚举值序列化为字符串的选项。 我正在使用 asp.net web api beta 附带的默认序列化程序 JSON serialization of c# enum as string的可能重复 【参考方案1】:

如果您切换到使用基于 Json.NET 的格式化程序(它将随下一个 ASP.NET Web API 提供开箱即用),您可以轻松完成此操作。有关详细信息,请参阅此 SO 帖子:

How to tell Json.Net globally to apply the StringEnumConverter to all enums

【讨论】:

【参考方案2】:

由于 Web API RC,您可以通过在 Application_Start() 期间将 StringEnumConvert 应用于现有的 JsonMediaTypeFormatter 转换器集合来获取枚举的字符串表示形式:

var jsonFormatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
var enumConverter = new Newtonsoft.Json.Converters.StringEnumConverter();
jsonFormatter.SerializerSettings.Converters.Add(enumConverter);

【讨论】:

第 1 行末尾需要一个 ;【参考方案3】:

要同时使用JsonMediaTypeFormatterenumConverter,我们可以使用下面的代码。 //代码从这里开始

var serializerSettings = GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings;
var enumConverter = new Newtonsoft.Json.Converters.StringEnumConverter();
serializerSettings.Converters.Add(enumConverter);
GlobalConfiguration.Configuration.Formatters.Clear();
GlobalConfiguration.Configuration.Formatters.Add(new PartialJsonMediaTypeFormatter()

     IgnoreCase = true,
     SerializerSettings = serializerSettings
);

【讨论】:

从 JSON 反序列化 java 枚举

】从JSON反序列化java枚举【英文标题】:DeserializejavaenumfromJSON【发布时间】:2013-09-0113:00:28【问题描述】:我们使用Jackson1.9.1序列化和反序列化与Java对象之间的JSON请求响应字符串。原始Java类型、集合类型和自定义对象被(反)... 查看详情

2go语言json与xml解析与表单操作(代码片段)

...言JSON与XML解析与表单操作1数据交互的格式2JSON方式2.1JSON序列化2.2JSON反序列化2.3解析到interface3XML方式3.1解析XML3.2生成XML4字段校验5文件上传2.1前后端模拟上传2.2go客户端模拟上传3防止重复提交1数据交互的格式常见的数据交互格... 查看详情

2go语言json与xml解析与表单操作(代码片段)

...言JSON与XML解析与表单操作1数据交互的格式2JSON方式2.1JSON序列化2.2JSON反序列化2.3解析到interface3XML方式3.1解析XML3.2生成XML4字段校验5文件上传2.1前后端模拟上传2.2go客户端模拟上传3防止重复提交1数据交互的格式常见的数据交互格... 查看详情

2go语言json与xml解析与表单操作(代码片段)

...言JSON与XML解析与表单操作1数据交互的格式2JSON方式2.1JSON序列化2.2JSON反序列化2.3解析到interface3XML方式3.1解析XML3.2生成XML4字段校验5文件上传2.1前后端模拟上传2.2go客户端模拟上传3防止重复提交1数据交互的格式常见的数据交互格... 查看详情

protobuf简介

参考技术AProtoBuf是一种无关语言,无关平台的序列化结构数据的方法,可用于通信协议、数据存储等XML:数据较为冗余,需要成对的闭合标签JSON:使用键值对方式,压缩了一定的数据空间并且具有可读性ProtoBuf:适合高性能,对... 查看详情

golanggo语言xml的序列与反序列化实践(代码片段)

Go语言XML的序列与反序列化实践导读本文使用Go原生支持的包,对XML字符串以及.xml文件进行序列化与反序列化实践。同时对Go语言下的JSON序列化反序列化与XML的序列化反序列化进行性能测试与比对。使用到的包是encoding/xml。... 查看详情

使用枚举数组反序列化 json

】使用枚举数组反序列化json【英文标题】:deserializejsonwitharrayofenum【发布时间】:2020-01-3106:11:43【问题描述】:使用枚举:namespaceAppGlobals[JsonConverter(typeof(JsonStringEnumConverter))]publicenumBoardSymbols[EnumMember(Value="X")]First=\'X\',[EnumMe 查看详情

使用 ServiceStack 自定义 Json 枚举序列化

】使用ServiceStack自定义Json枚举序列化【英文标题】:CustomJsonEnumSerializationusingServiceStack【发布时间】:2014-12-1203:34:05【问题描述】:我正在尝试序列化json中的枚举。如果枚举值为“男性”和“女性”。我想要它作为“M”和“F”... 查看详情

golanggo语言xml的序列与反序列化实践(代码片段)

Go语言XML的序列与反序列化实践导读本文使用Go原生支持的包,对XML字符串以及.xml文件进行序列化与反序列化实践。同时对Go语言下的JSON序列化反序列化与XML的序列化反序列化进行性能测试与比对。使用到的包是encoding/xml。... 查看详情

golanggo语言xml的序列与反序列化实践(代码片段)

Go语言XML的序列与反序列化实践导读本文使用Go原生支持的包,对XML字符串以及.xml文件进行序列化与反序列化实践。同时对Go语言下的JSON序列化反序列化与XML的序列化反序列化进行性能测试与比对。使用到的包是encoding/xml。... 查看详情

golanggo语言xml的序列与反序列化实践(代码片段)

Go语言XML的序列与反序列化实践导读本文使用Go原生支持的包,对XML字符串以及.xml文件进行序列化与反序列化实践。同时对Go语言下的JSON序列化反序列化与XML的序列化反序列化进行性能测试与比对。使用到的包是encoding/xml。... 查看详情

将枚举成员序列化为 JSON

】将枚举成员序列化为JSON【英文标题】:SerialisinganEnummembertoJSON【发布时间】:2014-08-2008:04:13【问题描述】:如何将PythonEnum成员序列化为JSON,以便将生成的JSON反序列化回Python对象?例如这段代码:fromenumimportEnumimportjsonclassStatus... 查看详情

枚举类型的 JSON 反序列化

】枚举类型的JSON反序列化【英文标题】:JSONdeserializationwithenumtypes【发布时间】:2017-04-1006:12:57【问题描述】:我正在尝试使用UnityEngine.JsonUtility从文件中反序列化我的json项目。它工作正常,但我的枚举类型没有得到正确转换。... 查看详情

json 枚举反序列化破坏了 kotlin 空安全性

】json枚举反序列化破坏了kotlin空安全性【英文标题】:jsonEnumdeserializationbreakeskotlinnull-safety【发布时间】:2019-07-1100:46:27【问题描述】:我使用Kotlindataclasses和GSON反序列化JSON模式,并实现默认值以防止JSON中的空对象。此外,JSON... 查看详情

JSON 序列化 - 将枚举转换为数字

】JSON序列化-将枚举转换为数字【英文标题】:JSONserialization-convertenumtonumber【发布时间】:2015-11-1101:27:06【问题描述】:我在C#后端使用枚举定义了设置,每个设置都有唯一的编号。publicenumSettingsSetting1=1,Setting2=2,//...我使用字典... 查看详情

unity含枚举类型json数据的序列化和反序列化(代码片段)

unity含枚举类型json数据的序列化编程环境win10+unity5.3f+VS2017unity的json功能不支持枚举类型的数据,这里写一下刚学到的转化方式。建立一个枚举类publicenumUIPanelTypeItemMessage,Knapsack,MainMenu,Shop,Skill,System,Task主要思想是利用Str... 查看详情

在 JSON (C#) 中序列化枚举值 [重复]

】在JSON(C#)中序列化枚举值[重复]【英文标题】:SerializingenumvaluesinJSON(C#)[duplicate]【发布时间】:2011-12-1820:51:47【问题描述】:可能重复:JSONserializationofc#enumasstring我有两个类如下:TransactionintOrderNumber//...snip...IEnumerable<Item>It... 查看详情

Newton.JSON将数字序列化为枚举项[重复]

】Newton.JSON将数字序列化为枚举项[重复]【英文标题】:Newton.JSONSerializenumbertoEnumitem[duplicate]【发布时间】:2019-03-1506:45:08【问题描述】:我们想用Newton.JSON将一个对象序列化为JSON,但是这个对象使用一个枚举,然后在底层int中进... 查看详情