在 VB.Net WebMethod 中反序列化 JSON 不工作

Deserialize JSON in VB.Net WebMethod isn't working

我在调用 WebMethod 时试图反序列化一个 JSON 对象。反序列化成功创建对象数组,但值为"Nothing"。我做错了什么?

我的对象class:

public class Data
{
    public Attribute[] Attributes{ get; set; }
}

public class Attribute
{
    public string Category { get; set; }
    public string Value { get; set; }

}

这是我的网络方法:

<System.Web.Services.WebMethod()>
Public Shared Function A_Method(ByVal Attributes As Data)
    'do things
End Function

这里是我的 JSON 对象,它被传递给 WebMethod:

{"Attributes":[
   {
      "Attribute":{
         "Category":"Category1",
         "Value":"Value1"
      }
   },
   {
      "Attribute":{
         "Category":"Category2",
         "Value":"Value2"
      }
   },
   {
      "Attribute":{
         "Category":"Category3",
         "Value":"Value3"
      }
   },
   {
      "Attribute":{
         "Category":"Category4",
         "Value":"Value4"
      }
   },
   {
      "Attribute":{
         "Category":"Category5",
         "Value":"Value5"
      }
   },
   {
      "Attribute":{
         "Category":"Category6",
         "Value":"Value6"
      }
   },
   {
      "Attribute":{
         "Category":"Category7",
         "Value":"Value7"
      }
   }
]
}

我的问题是我得到了包含类别和值标签的 7 个属性的数组,但值为 "Nothing"。我做错了什么?

您的对象模型与显示的 JSON 不匹配,后者实际上映射到以下

public class Data {        
    public AttributeElement[] Attributes { get; set; }
}

public class AttributeElement {        
    public Attribute Attribute { get; set; }
}

public class Attribute {        
    public string Category { get; set; }        
    public string Value { get; set; }
}

请注意数组中的元素如何具有 Attribute 属性。

<System.Web.Services.WebMethod()>
Public Shared Function A_Method(ByVal data As Data)
    'do things
    Dim someAttribute = data.Attributes(0).Attribute
    Dim category = someAttribute.Category
    Dim value = someAttribute.Value
    '...
End Function