首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >了解动力桩身参数

了解动力桩身参数
EN

Stack Overflow用户
提问于 2022-04-05 11:46:19
回答 1查看 551关注 0票数 -1

我有一个JSON,它接受包含dotnet core的正文消息。我试着用各种形式写这篇文章(如:

代码语言:javascript
复制
[HttpPost]
public async Task<IActionResult> Create([FromBody] dynamic content)

很难检索属性,并且不按名称返回属性。

代码语言:javascript
复制
[HttpPost]
public async Task<IActionResult> Create([FromBody] ExpandoObject content)

也很难从其中检索属性,尽管可以使用["details"]检索顶级属性(尽管没有更深的内容)。

代码语言:javascript
复制
[HttpPost]
public async Task<IActionResult> Create([FromBody] JObject content)

这样可以很容易地检索属性:

代码语言:javascript
复制
var firstName = content["contact"][0]["firstName"];
var accountName = content["generalDetails"]["accountName"];

正在发送的正文消息类似于此,不会在格式上更改。

代码语言:javascript
复制
{
    "details": {
        "phone": 0123456789,
        "email": "test@gmail.com",
        "county": "BF"
    },
    "admin": {
        "number": "gb12345"
    },
    "additional": {},
    "contact": [
        {
            "firstName": "Jeff",
            "lastName": "Bezos",
            "title": "Mr."
        },
        {
            "firstName": "Steve",
            "lastName": "Jobs",
            "title": "Mr."
        }
    ]
}

我希望使body参数动态(以某种形式),因为发送的实际正文内容非常大,并且包含比上面示例中的属性更多的属性。谨慎的做法是避免创建大型映射/DTO类,以防消息的设计在未来/进一步沿着开发路径发生变化。

是否有方法检索dynamicExpandoObject值的属性?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-05 12:05:59

免责声明:在处理C#和类型化语言时,创建类型总是比依赖动态之类的方法更好,它为您提供了语言设计的安全性和性能。

Is difficult to retrieve the properties and does not return the properties by name.

这正是dynamic的工作方式,因为类型未知,IDE提示和编译器本身无法告诉绑定到该类型的属性,因此它不会给您提供有关其属性的建议,但无论如何您都可以访问它们。

让我们假设您有以下类型:

代码语言:javascript
复制
public class MyType
{
   public int MyInt { get; set; }
   public string MyString { get; set; }
}

然后你就知道了

代码语言:javascript
复制
dynamic myObj = new MyType();

如果您键入myObj.,IDE将不显示任何属性,但是无论如何,您可以这样做,例如,Console.WriteLine(myObj.MyString),它不会出现问题。这里的要点是,您需要确切地知道变量名及其类型,因为如果您试图这样做

代码语言:javascript
复制
int myInt = myObj.MyInt + myObj.MyString;

编译器将接受没有问题,但是在运行时会出现问题,因为只有在程序执行过程中才会发现类型。

如果您决定采用一种非类型化的方式来处理事情,我建议您使用dynamic而不是ExpandoObject和JObject,这样就会稍微轻一些。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71751213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档