【发布时间】:2019-11-16 01:48:55
【问题描述】:
我面临一个问题,我需要从多种类型构造一个对象并返回到前端,这就是我想要的(在 C# 中)。
前端想要的形状是这样的
{
...
"props" : // this is the place I need to fill-up.
...
}
对于控制器,这是一个自定义响应。
public IActionResult Index()
{
return JohnDoe.Render();
}
在幕后,Render 将从两个地方获取一些数据。
public object Foo()
{
return string, int, IEnumerable, instance, etc;
}
public object Bar()
{
return string, int, IEnumerable, instance, etc;
}
我知道return 声明无效,我的意思是这些都是可能的。
这就是我最终想要的。
public object Combine()
{
var foo = Foo();
var bar = Bar();
return foo + bar;
}
同样return 声明无效,我想要一个包含它们的最终object。它可以是Dictionary<string, object> 或匿名对象new {},或者只要一个对象同时具有这两者就可以。
显然我在这里所拥有的东西是不可能实现的。这是我想出的两个选项。
- 只需使用包装器来包装它们,这就是我所做的。
public object Combine()
{
var foo = Foo();
var bar = Bar();
return new { foo, bar };
}
我知道我可以有一个Type 而不是一个匿名对象,问题是这将引入两个键foo 和bar,如果可能的话我不想这样做。
- 使
foo和bar只返回instance。没有string、int、Array、IEnumerable等。 如果我这样做,事情会变得容易一些。我需要做的就是遍历properties获取values并映射到new {}或Dictionary<string, object>。这样我就不需要引入新的密钥了。
更新:所以基本上我想尽可能避免引入新密钥,因为我只想返回没有包装器的原始密钥。这就是为什么我想出了选项 2,只允许 instance。请告诉我你的想法。
【问题讨论】:
-
这听起来像是 X-Y 问题。你有一个问题X,你认为如果你能做Y,那么你就可以解决这个问题,所以你来这里是为了问Y,这让我们很困惑。你告诉我们X实际上是什么?你到底想做什么?
-
@Enigmativity hahhah,你是绝对正确的。然而,这是问题的核心。
-
是的,但是您所说的问题令人困惑和抽象。如果您告诉我们您真正想要做什么,那么我们也许可以给出一个很好的答案。
-
@Enigmativity 我认为你是对的,我会尽快更新问题。
-
@Enigmativity 抱歉,我之前没有说清楚我的问题,现在我已经更新了问题,如果可以理解请告诉我。谢谢
标签: c# asp.net .net asp.net-core .net-core