创建动态类以接受动态JSON

时间:2013-09-14 02:11:54

标签: json asp.net-web-api

我有一个web api端点,它接收JSON并将其序列化为对象。非常基本和常见的东西。但是,我需要接受自定义用户定义的字段。例如,开发人员可能希望为“account#”添加自定义字段,并通过API传递该字段。如果我不知道这个名字的话,我会被困在如何在课堂上定义一个字段。我需要支持无限的字段,所以我不能简单地为custom1,custom2,custom2等创建一个字段。

我认为我的JSON看起来像这样......其中custom_label_xxx标识字段标签:

...  
"custom_fields": {
"custom_label_90": 49,
"custom_label_83": [ 28, 29, 30 ],
"custom_label_89": "2012/05/21"   
},   
...

我可以在世界上如何设置动态类来接受这个动态JSON?

我直接使用Google搜索,无法使用自定义字段找到任何示例。

2 个答案:

答案 0 :(得分:0)

您的帖子方法可以接受动态作为参数:

public HttpResponseMessage Post(dynamic obj)

这将接受您发送的每个json。

答案 1 :(得分:0)

Saykor的回答可能是正确的。但是,我已经有大量的业务对象可以使用,我只希望自定义字段是动态的。此外,我希望使用示例JSON生成Web API帮助页面。因此,使方法动态不适合我。

我最终做的事情对某些人来说可能是显而易见的。我在类上创建了一个属性字典。当我运行帮助页面时,它会生成样本JSON,它看起来正是我需要的。我还没有测试过,但我认为它会将JSON序列化为字典。

这是VB中的属性,但它也可以在C#中轻松使用动态。

    Private _customfields As Dictionary(Of String, String)
    <DataMember(EmitDefaultValue:=False, IsRequired:=False, Order:=11)> _
    Public Property customfields() As Dictionary(Of String, String)
        Get
            Return Me._customfields
        End Get
        Set(ByVal value As Dictionary(Of String, String))
            Me._customfields = value
        End Set
    End Property

这导致了以下JSON:

 "customfields": {
  "sample string 1": "sample string 2",
  "sample string 3": "sample string 4",
  "sample string 5": "sample string 6"
}