extern crate serde; extern crate serde_json; macro_rules! enum_str { ($name:ident { $($variant:ident($str:expr), )* }) => { #[derive(Clone, Copy, Debug, Eq, PartialEq)] pub enum $name { $($variant,)* } impl ::serde::Serialize for $name { fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: ::serde::Serializer, { // 将枚举序列化为字符串。 serializer.serialize_str(match *self { $( $name::$variant => $str, )* }) } } impl ::serde::Deserialize for $name { fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: ::serde::Deserializer, { struct Visitor; impl ::serde::de::Visitor for Visitor { type Value = $name; fn expecting(&self, formatter: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { write!(formatter, "a string for {}", stringify!($name)) } fn visit_str<E>(self, value: &str) -> Result<$name, E> where E: ::serde::de::Error, { match value { $( $str => Ok($name::$variant), )* _ => Err(E::invalid_value(::serde::de::Unexpected::Other( &format!("unknown {} variant: {}", stringify!($name), value) ), &self)), } } } // 从字符串反序列化枚举。 deserializer.deserialize_str(Visitor) } } } } enum_str!(LanguageCode { English("en"), Spanish("es"), Italian("it"), Japanese("ja"), Chinese("zh"), }); fn main() { use LanguageCode::*; let languages = vec![English, Spanish, Italian, Japanese, Chinese]; // Prints ["en","es","it","ja","zh"] println!("{}", serde_json::to_string(&languages).unwrap()); let input = r#" "ja" "#; assert_eq!(Japanese, serde_json::from_str(input).unwrap()); }
我的JSON如下所示: 我的课程如下所示: 如何反序列化到映射如和到
问题内容: 我在Android上的Java中具有以下枚举,并且我希望能够将传入的JSON字符串/对象中的整数反序列化为此Enum类型。我一直在Jackson和GSON上受到欢迎,但在我正在使用的JSON.org包上却什么也没有。 有没有简单的方法可以做到这一点,或者我需要更改JSON解码器?谢谢。 问题答案: 将返回您的数组,然后可以遍历数组并检查
我在Android上的Java中有以下枚举,我希望能够将传入的JSON字符串/对象中的整数反序列化为该枚举类型。我在杰克逊和GSON上得到了点击,但在json.org包上没有,我正在使用。 是否有一个简单的方法来做到这一点,或者我需要改变JSON解码器?谢了。
问题内容: 我想使用类似于JSON.NET的属性将枚举序列化为字符串 示例类: 如果我使用JSON.NET对此序列化: 设置为,我更喜欢。 问题答案: 看一看。应该做你想做的。 编辑: http : //james.newtonking.com/projects/json/help/html/T_Newtonsoft_Json_Converters_StringEnumConverter.htm
我需要序列化/反序列化一个POJO包含一个特殊枚举(不是字符串的枚举)。我找到了很多字符串枚举的示例,但不是我的情况。 而不是: {“代码”:“20”,“消息”:“无效的URL参数值”,“说明”:“缺少应用程序标识符”} 编辑1 但我的结果是: 现在,我希望将改为
问题内容: 考虑以下枚举和类: 并考虑以下主要功能: 当前,该主输出为: 这种输出并不适合我,因为除了字符串的,我想它是,这是序号值在枚举。 所以我想要得到的实际结果是: 有一些优雅的方法可以使其表现为这种方式吗? 问题答案: 它应该通过指定映射器来工作。 如注解的Javadoc所述,这也适用于反序列化: 注意:当用于Java枚举时,一个附加功能是带注释的方法返回的值也被视为要反序列化的值,而不仅