VB.NET接收含斜杠键名的POST JSON数据问题
嗨,这个问题我碰到过好多次了——核心就是让JSON序列化器把带特殊字符的键名和你类里合法的属性名做映射,完全不用修改原始JSON的结构,给你两种最常用的解决方案:
方案1:使用Newtonsoft.Json(Json.NET,多数.NET项目常用的第三方库)
你只需要给Testing类里对应的属性加上JsonProperty特性,指定它对应的JSON键名即可,属性名改成合法的名称(比如ItemID):
Imports Newtonsoft.Json Public Class Testing Public Property _notes As String Public Property _received As Boolean ' 用特性指定JSON中的键名 <JsonProperty("item/id")> Public Property ItemID As String End Class
这样你的Post方法完全不用修改,当请求进来时,Json.NET会自动把JSON里的item/id值映射到ItemID属性上。
方案2:使用System.Text.Json(.NET Core/.NET 5+内置的序列化库)
如果你的项目用的是.NET Core或更高版本,推荐用内置的System.Text.Json,对应的特性是JsonPropertyName:
Imports System.Text.Json.Serialization Public Class Testing Public Property _notes As String Public Property _received As Boolean ' 指定JSON键名 <JsonPropertyName("item/id")> Public Property ItemID As String End Class
兼容老版本.NET Framework(可选)
如果是老的.NET Framework项目,用DataContractJsonSerializer的话,可以用DataMember特性来指定映射:
Imports System.Runtime.Serialization <DataContract> Public Class Testing <DataMember(Name:="_notes")> Public Property _notes As String <DataMember(Name:="_received")> Public Property _received As Boolean <DataMember(Name:="item/id")> Public Property ItemID As String End Class
不管用哪种方案,本质都是通过序列化特性告诉序列化器:“JSON里的这个键,对应我类里的这个属性”,完美解决变量名不能包含斜杠的问题,又不用改动你无法控制的JSON结构。
内容的提问来源于stack exchange,提问作者Tim F
相关产品推荐
相关产品推荐

