Java 的世界,我不懂:奇葩的 json 序列化

先上张图,代表我心中的十万头草泥马:

Java 的世界,我不懂:奇葩的 json 序列化_第1张图片

 

写这么长的代码,头回见数组和单个实体共用同一个 json 节点的! 恐怕只有 java 社区的大牛B 才能做出这等事。。

由 Apache 发布: http://cxf.apache.org/docs/jax-rs-data-bindings.html
处理 JSON 数组序列化问题
JSON 社区存在一个众所周知的问题,即对仅包含一个值的列表对象进行序列化会出错。要解决此问题,需要在 JSON 提供程序上启用“serializeAsArray”功能,并通过其他选项指定需要使用“arrayKeys”属性进行相应处理的各个字段。
请注意,“serializeAsArray”和“arrayKeys”可结合生成所谓的自然惯例序列。

 

这个“众所周知”,我这些年居然一无所知啊!书白读了。。。

 

用 Json.Net 解析这样的数据好像没有原生的支持,这个什么 serializeAsArray / arrayKeys 根本就搜到有用的东西出来!

还好我不傻,搞了个解决方法出来:

 1     public class ElementToArrayConverter : JsonConverter
 2     {
 3         public override bool CanConvert(Type objectType)
 4         {
 5             return true;
 6         }
 7 
 8         public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
 9         {
10             if (reader.TokenType == JsonToken.Null)
11                 return null;
12 
13             var token = JObject.ReadFrom(reader);
14 
15             if (token.Type == JTokenType.Array)
16             {
17                 //
18             }
19             else
20             {
21                 #region 用于逗逼的 EAN Api,不同的参数,单个的直就是一个实例,多个的返回成数组!导致类型转换失败!!!
22                 if (objectType.GetInterface("IEnumerable") != null)
23                 {
24                     var json = string.Format("[{0}]", token);
25                     token = JToken.Parse(json);
26                 }
27                 #endregion
28             }
29 
30             return serializer.Deserialize(token.CreateReader(), objectType);
31         }
32 
33         public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
34         {
35             throw new NotImplementedException();
36         }
37     }

 

然后加标注:

1         [JsonConverter(typeof(ElementToArrayConverter))]
2         [JsonProperty("HotelRoomResponse")]
3         public IEnumerable<RoomInfo> Room
4         {
5             get;
6             set;
7         }

 

 

Java我不懂,读书少,不知道是不是所有的 json 序列化都有这样的问题。

你可能感兴趣的:(Java 的世界,我不懂:奇葩的 json 序列化)