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から-to-specify-types-that-are-not-known-statically .

ビューモデルの配列をどのように処理するかを除いて、これを修正できる汎用スーパークラスを作成したかったのですか?

[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?
    }
}
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 に答える