我有一个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搜索,无法使用自定义字段找到任何示例。
答案 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"
}