2017-04-24 9 views
2
public class Question {  
    String QuestionsID = ""; 
} 
public class QuestionTrueOrFalse : Question { 
    public string Answer =""; 
} 
public class QuestionMultipleChoice : Question { 
    public List<MultipleChoiceOption> obj; 
} 
public class MultipleChoiceOption { 
    public int OptionMultipleChoiceID = 0; 
    public string OptionsTextAr = "", Answer = ""; 
} 

私は上記のように、同じ親に由来する2つのクラスを持っている、と私は両方QuestionMultipleChoiceQuestionTrueOrFalseが含まれているオブジェクトのリストを送信したいですWebサービスから。戻りオブジェクトは、次のとおりです。WCFサービスで同じ親由来の異なるクラスとオブジェクトのリストを送信

public class ReturnedObjectList<T>{ 
    public List<T> ListItems = new List<T>); 
    public string Status="" ,Message=""; 
} 

私のWebサービスは、次のとおりです。

public ReturnedObjectList<Question> SelectQuestions(string ID) 
{ 
    ReturnedObjectList<Question> obj = new ReturnedObjectList<Question>(); 
    obj.ListItems.Add(new QuestionMultipleChoice()); 
    obj.ListItems.Add(new QuestionTrueOrFalse()); 
    return obj; 
} 

私は郵便配達で、このWebサービスをテストするとき、私は任意の応答を得ることはありません。

コードは、リストにオブジェクトを1つだけ追加した場合にのみ機能します。私は、オブジェクトの一種類のみ含まれているために、私の返されたオブジェクトを変更した場合:

ReturnedObjectList<QuestionMultipleChoice> obj = new ReturnedObjectList<QuestionMultipleChoice>(); 

を私はモバイルアプリにjsonのように、1つのリストに質問のすべての種類を送りたいです。これは可能ですか?

答えて

2

カスタムタイプ(Questionタイプなど)にData Contractを定義していない場合は、クラスのパブリックプロパティのみがシリアル化されます。

通常、カスタムタイプにはData ContractData Memberを明示的に定義することをお勧めします。

私はあなたのカスタム・タイプのための次のクラス定義を示唆している:

[DataContract] 
public class Question 
{ 
    [DataMember] 
    String QuestionsID { get; set; } = ""; 
} 

[DataContract] 
public class QuestionTrueOrFalse : Question 
{ 
    [DataMember] 
    public string Answer { get; set; } = ""; 
} 

[DataContract] 
public class QuestionMultipleChoice : Question 
{ 
    [DataMember] 
    public List<MultipleChoiceOption> obj { get; set; } 
} 

[DataContract] 
public class MultipleChoiceOption 
{ 
    [DataMember] 
    public int OptionMultipleChoiceID { get; set; } = 0; 
    [DataMember] 
    public string OptionsTextAr { get; set; } = ""; 
    [DataMember] 
    public string Answer { get; set; } = ""; 
} 

あなたはまた、あなたのReturnedObjectListKnownTypeAttributeを追加する必要があり、Questionのリストを返すことができます。私は郵便配達になりました.Now再生のため

[DataContract] 
[KnownType(typeof(QuestionTrueOrFalse))] 
[KnownType(typeof(QuestionMultipleChoice))] 
public class ReturnedObjectList<Question> 
{ 
    [DataMember] 
    public List<Question> ListItems = new List<Question>(); 
    [DataMember] 
    public string Status { get; set; } = ""; 
    public string Message { get; set; } = ""; 
} 
+0

おかげで、それは空です:

ReturnedObjectListのために、次のコードを試してみてください。関数では2つのオブジェクトを返しました – rajin

+0

Plsは私が答えを更新したように見えます。 –

+0

公共ReturnedObjectListQ SelectQuestionsが構文はerror.and修正後に動作しない [OperationContract] [WebInvoke(METHOD = "POST"、ResponseFormat = WebMessageFormat.Json、RequestFormat = WebMessageFormat.Json、bodyStyle属性= WebMessageBodyStyle.WrappedRequest)] (文字列QID、文字列StudentID、文字列QuizID、文字列ペンディング) {ReturnedObjectListQ obj = new ReturnedObjectListQ (); obj.ListItems.Add(新しいQuestionMultipleChoce()); obj.ListItems.Add(新しいQuestionTrueOrFalse()); return obj; }私はこのクラス パブリッククラスReturnedObjectList {公衆リストに[データメンバー] リストアイテム=新しいリストを追加このコール – rajin

関連する問題