所以我试图对我们的MVC4框架项目的所有WebAPI调用进行一般性返回。
我遇到的问题是object
类型无法轻松序列化。
所以我们的回归结构是......,
[DataContract]
class UiOutput {
[DataMember("success")]
public bool Success {get;set;};
[DataMember("success")]
public object Data {get;set;};
}
这种方式每次进行调用时,如果成功与否,则返回数据。数据可以是模型数组或其他任何数据。显然,这是php
中的一项简单任务,但我们不在那里:)
所以我读到我遇到的问题是Error Three
来自网站http://www.johnsoer.com/blog/?tag=the-type-was-not-expected-use-the-xmlinclude-or-soapinclude-attribute-to-specify-types-that-are-not-known-statically。
所以我想创建一个可以解决这个问题的通用超类,除了它如何处理ViewModel数组?
[XmlInclude(typeof(MyAwesomeViewModel))]
class SuperType { }
[DataContract]
class UiOutput {
[DataMember("success")]
public bool Success {get;set;};
[DataMember("success")]
public SuperType Data {get;set;};
}
这将有助于返回说
[DataContract]
class MyAwesomeViewModel {
[DataMember("awesome")]
public bool Awesome {get;set;};
[DataMember("viewModel")]
public string ViewModel {get;set;};
}
但是如果我有一个想要返回array
MyAwesomeViewModel的控制器,那么我不知道该怎么做!
我的意思是,如果有像
这样的控制器class MyAwesomeController : ApiController {
public UiOutput ByYear(int year) {
MyAwesomeViewModel[] models = Rep.GetByYear(year);
UiOutput output = new UiOutput();
output.success = true;
output.data = //Todo: Is there a way to overcome?
}
}
答案 0 :(得分:0)
如果你想要一个泛型返回值,那么使用HttpResponseMessage并创建一个派生自HTTPContent的有效负载对象。
class MyAwesomeController : ApiController {
public HttpResponseMessage ByYear(int year) {
MyAwesomeViewModel[] models = Rep.GetByYear(year);
return new HttpResponseMessage(statusGoesHere) { Content = GetUIContent(models) };
}
}
class UIContent : HttpContent {
...
}