1

所以我正在尝试对我们的 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读到我遇到的问题- 静态指定未知类型

所以我想创建一个通用的超类来解决这个问题,除了它如何处理 ViewModels 数组?

[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;};
}

但是如果我有一个想要返回arrayMyAwesomeViewModel 的控制器,那么我不知道该怎么做!

我的意思是如果有一个控制器像

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?
    }
}
4

1 回答 1

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 {
   ...
}
于 2012-08-16T19:22:16.487 回答