JeffreySu / WeiXinMPSDK

微信全平台 .NET SDK, Senparc.Weixin for C#,支持 .NET Framework 及 .NET Core、.NET 8.0。已支持微信公众号、小程序、小游戏、微信支付、企业微信/企业号、开放平台、JSSDK、微信周边等全平台。 WeChat SDK for C#.
https://weixin.senparc.com
Apache License 2.0
8.4k stars 4.35k forks source link

WeixinJsonConventer对枚举的序列化方式错误 #1189

Open Inuyasha-cxk opened 6 years ago

Inuyasha-cxk commented 6 years ago
问题描述

WeixinJsonConventer序列化微信接口对象时,枚举类型未正常序列化为对应的String标识符而是序列化为实际值,导致向微信接口传输的内容与期望不符 仅测试了.NET 4.5下的创建会员卡接口,其使用了WeixinJsonConventer进行请求对象序列化,其他的序列化方式未测试,不确定是否存在同样问题

重现问题步骤(如果可以)
  1. 使用微信创建会员卡接口并使用custom_field1/custom_field2/custom_field3 增加自定义会员信息类目时, name_type为枚举 Senparc.Weixin.MP.MemberCard_CustomField_NameType, 但是在序列化为 jsonString 后,name_type 变成了 int, 而不是对应的 MemberCard_CustomField_NameType.ToString() 值。 如 MemberCard_CustomField_NameType.FIELD_NAME_TYPE_LEVEL, 期望序列化值为 “FIELD_NAME_TYPE_LEVEL”, 实际运行结果为 “0”
微信官方文档 URL

https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1451025283

微信官方文档快照(直接复制关键内容到下方)

"custom_field1": { "name_type": "FIELD_NAME_TYPE_LEVEL", "url": "http://www.qq.com" }

发现问题的模块
模块对应的.net版本
开发环境
缓存环境
联系方式

Email:inuyasha.cxk@gmail.com

JeffreySu commented 6 years ago

对的,似乎是有这个问题你是否有时间PR代码过来?可以用Newtonsoft进行改写。

Inuyasha-cxk commented 6 years ago

我试试吧,Newtonsoft.Json确实可以解决这个问题,但是实体字段对应的属性也要更改,可能会引起其他的问题,我通过继承原有实体并定义同名字段可以正常通过Newtonsoft.Json序列化,直接改写实体需要再看一下调用情况

JeffreySu commented 6 years ago

好的,欢迎PR过来,成为我们的Contributor,近期我们也会启动一轮评选 : )

JeffreySu commented 6 years ago

1198