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 - 如何使用错误代码扩展模型状态错误