Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通用可序列化WebAPI MVC4_C#_Serialization_Asp.net Web Api - Fatal编程技术网

C# 通用可序列化WebAPI MVC4

C# 通用可序列化WebAPI MVC4,c#,serialization,asp.net-web-api,C#,Serialization,Asp.net Web Api,因此,我尝试对MVC4框架项目的所有WebAPI调用进行一般性返回 我遇到的问题是类型对象无法轻松序列化 所以我们的回报结构是 [DataContract] class UiOutput { [DataMember("success")] public bool Success {get;set;}; [DataMember("success")] public object Data {get;set;}; } 这样,每次调用时,它都会返回成功与否以及数据。数

因此,我尝试对MVC4框架项目的所有WebAPI调用进行一般性返回

我遇到的问题是类型
对象
无法轻松序列化

所以我们的回报结构是

[DataContract]
class UiOutput {
    [DataMember("success")]
    public bool Success {get;set;};
    [DataMember("success")]
    public object Data {get;set;};
}
这样,每次调用时,它都会返回成功与否以及数据。数据可以是一组模型或其他任何东西。显然,这在
php
中是一项简单的任务,但我们没有做到:)

所以我从网站上读到我遇到的问题是,
错误三

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

[XmlInclude(typeof(MyAwesomeViewModel))]
class SuperType { }
例子: 这将有助于回报

[DataContract]
class MyAwesomeViewModel {
    [DataMember("awesome")]
    public bool Awesome {get;set;};
    [DataMember("viewModel")]
    public string ViewModel {get;set;};
}
但是如果我有一个控制器想要返回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?
    }
}

如果您想要一个通用的返回值,那么使用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 {
   ...
}

如果我有任何不清楚的地方,请让我知道,我会马上编辑。TTP已经有了成功的状态码,没有必要在正文中重复。
class MyAwesomeController : ApiController {
    public HttpResponseMessage ByYear(int year) {
        MyAwesomeViewModel[] models = Rep.GetByYear(year);
        return new HttpResponseMessage(statusGoesHere) { Content = GetUIContent(models) };
    }
}

class UIContent : HttpContent {
   ...
}