c# REST Controller 接受复杂对象属性的名称范围

Posted

技术标签:

【中文标题】c# REST Controller 接受复杂对象属性的名称范围【英文标题】:c# REST Controller accepts range of names for complex object property 【发布时间】:2021-11-20 10:31:19 【问题描述】:

我有一个以复杂对象作为参数的端点。当它被调用时,用户提供一个 JSON 对象。

public class ComplexObject

    [JsonProperty("multiNamedProperty")]
    public string MultiNamedProperty  get; set; 
    public dynamic OtherProperty  get; set; 
    public double NumberProperty  get; set; 


public JsonResult MethodName(ComplexObject poco)

    this.ServiceName.PerformLogic(poco);
 

我希望能够为端点提供一个 ComplexObject,但有一组可用于所有映射的属性的名称,如“name”、“1”、“banana”、“n4m3”、“fullName”等。

预期对象示例:


    thisStringCouldBeAnything: "notNullValue",
    bananaBananaTerracottaPie:  
        banana: ["terracotta", "pie"],
        terracotta: "pie"
    ,
    numberProperty: 0

【问题讨论】:

你是说 ComplexObject 可能有一组不可预测的属性名称吗?从你的描述看,你的具体意思不是很清楚。你能直接举一个你想发送的 JSON 的例子吗? 已使用示例输入对其进行了更新 你可以从JDocument开始 我明白了。可以将其反序列化为字典,然后 这个bananaBananaTerracottaPie怎么样?这也是动态的吗? 【参考方案1】:

我建议您混合使用 Dictionary 和 JDocument。但这意味着如果要将预期对象映射到类,则需要稍微重构它。

例子,


    properties: 
      thisStringCouldBeAnything: "notNullValue",
      bananaBananaTerracottaPie:  
        banana: ["terracotta", "pie"],
        terracotta: "pie"
        ,
      numberProperty: 0
    
   

C#类

public class ComplexObject

    Dictionary<string,JDocument> Properties get;set;


或者,您可以直接在参数中使用字典而不使用类,

public ActionResult GetSomething(Dictionary<string,JDocument>  properties)



【讨论】:

以上是关于c# REST Controller 接受复杂对象属性的名称范围的主要内容,如果未能解决你的问题,请参考以下文章

C# Rest 服务 - 无法在服务方法中接收 JSON 请求

C# REST API - 如何使用错误代码扩展模型状态错误

REST - 复杂的应用程序

REST - 复杂的应用程序

Rest API Post Json 使用带有两个参数的 C#

使用 C# REST API 从 TFS 获取用户身份