そのため、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?
}
}