2014-01-30 73 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"}}