0
我正在擴展JsonResult
,並且需要向其中的Data
屬性添加屬性。將屬性追加到匿名類型以與JavaScriptSerializer一起使用
public override void ExecuteResult(ControllerContext context)
{
// error checking removed for brevity
this.Data = AppendSomehow(
this.Data, // = new { hello = "hi" }
new { goodbye = "bye" });
base.ExecuteResult(context); // calls javaScriptSerializer.Serialize(this.Data)
}
一種選擇是將其轉換成一個IDictionary<string, object>
:
private static object AppendSomehow(object data, object additional)
{
var originalDictionary = new RouteValueDictionary(original);
var additionalDictionary = new RouteValueDictionary(additional);
foreach (var kv in additionalDictionary)
originalDictionary.Add(kv.Key, kv.Value);
return originalDictionary;
}
但是當通過JavaScriptSerializer
通過這個會出來爲:
[{"Key":"hello","Value":"hi"},{"Key":"goodbye","Value":"bye"}]
當期望的結果是:
{"hello":"hi","goodbye":"bye"}
我可以複製粘貼base.ExecuteResult(ControllerContext)
實現並修改它以使用在How to flatten an ExpandoObject returned via JsonResult in asp.net mvc?中發佈的解決方案,但是當實現已經存在時,看起來有點髒。