0

我有一个 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?

我一直在谷歌上搜索,找不到任何使用自定义字段的示例。

4

2 回答 2

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"
}
于 2013-09-14T21:39:29.767 回答
0

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

public HttpResponseMessage Post(dynamic obj)

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

于 2013-09-14T08:08:07.253 回答