2014-01-30 33 views
1

我的部分代码这样的:方法返回匿名对象

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); 

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

+1

您不能返回匿名对象。创建一个类并传递其对象 –

+4

@NitinVarpe您可以返回匿名对象,但必须通过返回类型设置为'object'或'dynamic'的方法来完成此操作,并且您没有类型安全性和智能感知支持。 – MarcinJuraszek

+0

@MarcinJuraszek yep如上所述http://tomasp.net/blog/cannot-return-anonymous-type-from-method.aspx/ –

回答

0

看起来您感兴趣的是将属性生成为匿名类型并为运行时的属性赋值。

有一个帖子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"}}