トップ回答者
WCF+SharePoint2010+Rest+.net3.5でAbstractClass(抽象クラス)またはinterface(インターフェース)を使いたい。

質問
-
SharePoint 2010の上で、WCFサービスを作成しています。
WCFをRestで作成し、以下のようなサンプルサービスを作りました。
これをクライアントから呼び出し、派生クラスを取得したいと思っています。
しかし、サーバーからJson文字列は返ってくるのですが、それが上手くDeserialize出来ません。
どうしたら良いでしょうか?
開発環境はC#,.net3.5 VS2010です。public interface IAnimal { [DataMember] string Name { get; } } [DataContract] public class Dog1 : IAnimal { [DataMember] public string Name { get; set; } [DataMember] public int Inu { get; set; } } [DataContract] public class Cat1 : IAnimal { [DataMember] public string Name { get; set; } [DataMember] public DateTime Neko{ get; set; } } [DataContract] [KnownType(typeof(Dog2))] [KnownType(typeof(Cat2))] public abstract class AnimalBase { [DataMember] public string Name { get; set; } } [DataContract] public class Dog2 : AnimalBase { [DataMember] public int Inu { get; set; } } [DataContract] public class Cat2 : AnimalBase { [DataMember] public DateTime Neko { get; set; } } [ServiceContract] public interface IAbstractService { #region interfaceテスト用メソッド /// <summary> /// Interfaceを返すサンプルメソッド /// </summary> [OperationContract] [WebInvoke( UriTemplate = "/GetInterface1", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json, Method = "POST")] IAnimal GetInterface1(); /// <summary> /// AbstractClassを返すサンプルメソッド /// </summary> [OperationContract] [WebInvoke( UriTemplate = "/GetAbstractClass1", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json, Method = "POST")] AnimalBase GetAbstractClass1(); } public class AbstractService : IAbstractService { #region interfaceテスト用メソッド /// <summary> /// Interfaceを返すサンプルメソッド /// </summary> public IAnimal GetInterface1() { return new Dog1 { Name = "犬", Inu = 18 }; } /// <summary> /// AbstractClassを返すサンプルメソッド /// </summary> public AnimalBase GetAbstractClass1() { return new Dog2 { Name = "犬", Inu = 30, }; } }
回答
-
しかし、サーバーからJson文字列は返ってくるのですが、それが上手くDeserialize出来ません。
どうしたら良いでしょうか?上手くDesrialize出来ません、ではわかりません。質問者さんは何が起きているのかを記述すべきです。
と言いつつ、既知のデータ コントラクト型を参考にKnownType属性やあとほとんどドキュメントがありませんがServiceKnownType属性や、最終的にはapp.configに記載するとDesirializeできるようになります。
- 回答としてマーク ti_ti_ti 2014年3月25日 2:53
すべての返信
-
しかし、サーバーからJson文字列は返ってくるのですが、それが上手くDeserialize出来ません。
どうしたら良いでしょうか?上手くDesrialize出来ません、ではわかりません。質問者さんは何が起きているのかを記述すべきです。
と言いつつ、既知のデータ コントラクト型を参考にKnownType属性やあとほとんどドキュメントがありませんがServiceKnownType属性や、最終的にはapp.configに記載するとDesirializeできるようになります。
- 回答としてマーク ti_ti_ti 2014年3月25日 2:53