【问题标题】:Method that returning anonymous object返回匿名对象的方法
【发布时间】:2014-02-02 06:05:45
【问题描述】:

我有这样的代码部分:

var @object =
    new
    {
        val = "SUCCESS",

        stuff = new
        {
            stuff1 = model.Stuff1,
            stuff2 = model.Stuff2
        }
    };
return Json(@object, JsonRequestBehavior.AllowGet);


var @object =
    new
    {
        val = "SUCCESS"
    };
return Json(@object, JsonRequestBehavior.AllowGet);

var @object =
    new
    {
        val = "ERROR",
        details = "Details"
    };  
return Json(@object, JsonRequestBehavior.AllowGet);

对我来说,它看起来像是一种应该修复的重复代码。

我想重构那段代码,这样我就可以得到类似的东西:

var @object = GetResult("SUCCESS", object myobj)
return Json(@object, JsonRequestBehavior.AllowGet);

这样做的最佳做法是什么?

【问题讨论】:

  • 您不能返回匿名对象。创建一个类并传递它的对象
  • @NitinVarpe 您可以返回匿名对象,但您必须从返回类型设置为 objectdynamic 的方法执行此操作,并且您会失去类型安全性和智能感知支持。
  • @MarcinJuraszek 是的,如此处所述tomasp.net/blog/cannot-return-anonymous-type-from-method.aspx
  • 我认为您没有想到这一点。您创建的每个@object 都是不同的。您无法从一个 GetResult 方法中全部返回它们。您试图满足的潜在需求是什么?
  • @Enigmativity 我在代码中有很多地方都有重复的@var @object = {bla bla} 结构。我只是想用更简单的代码块来减少重复的多级代码块。

标签: c# .net asp.net-mvc-5


【解决方案1】:

您似乎有兴趣为匿名类型生成属性并在运行时为这些属性分配值。

有一个帖子here 向您展示了如何动态创建类,但看起来您必须非常努力地工作才能到达您想要的位置。

为什么不从不同类型的对象生成 JSON 字符串并将其合并为一个 JSON 字符串?

       string val = "SUCCESS";


        var stuff = new
        {
            stuff1 = "some string",
            stuff2 = "4324"
        };


        string json = new JavaScriptSerializer().Serialize(
            new {val, stuff}
            );

{"val":"SUCCESS","stuff":{"stuff1":"some string","stuff2":"4324"}}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-05
    • 2023-04-09
    • 2012-02-06
    • 1970-01-01
    相关资源
    最近更新 更多