2011-07-12 10 views
2

JSONを厳密に型指定されたクラスに変換する際にエラーが発生しました。データ契約を使用したJSONからC#オブジェクト - ここでは何が欠けていますか?

マイJSON:{"listBoxID":"ctl00_ctl00_MainContentRoot_MainContent_lstBxSettings","sourceItemText":"Horizontal Bar","sourceItemValue":"Horizontal"}

DroppedItem droppedItem = JsonConvert.DeserializeObject<DroppedItem>(json); 

/// <summary> 
/// Outlines an object which is useful in simplifying how a CormantRadDock is created. 
/// Instead of passing in lots of parameters, would rather just pass in an object that the 
/// CormantRadDock knows how to interpret. 
/// </summary> 
[DataContract] 
public class DroppedItem 
{ 
    private static readonly ILog Logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 

    [DataMember(Name = "sourceItemText")] 
    public string Text { get; set; } 

    [DataMember(Name = "sourceItemValue")] 
    public string Value { get; set; } 

    [DataMember(Name = "listBoxID")] 
    public Reports ReportType { get; set; } 

    public DroppedItem() { } 

    public DroppedItem(string text, string value, string listBoxID) 
    { 
     Logger.DebugFormat("Text: {0}, Value: {1}, slidingPaneTitle: {2}", text, value, listBoxID); 
     Text = text; 
     Value = value; 
     ReportType = DetermineReportType(listBoxID); 
    } 

    private Reports DetermineReportType(string listBoxID) 
    { 
     if (listBoxID.Contains("lstBxHistorical")) 
     { 
      return Reports.HistoricalReport; 
     } 
     else if (listBoxID.Contains("lstBxCustom")) 
     { 
      return Reports.CustomReport; 
     } 
     else 
     { 
      return Reports.None; 
     } 
    } 
} 

問題がReportTypeにlistBoxIDを変換しています。

キャッチされないSys.WebForms.PageRequestManagerServerErrorException:Sys.WebForms.PageRequestManagerServerErrorException:エラー 'CableSolve.Web.Reports' が

それは関係なく、文が見つかった場合かどうかの発生を入力する値 "ctl00_ctl00_MainContentRoot_MainContent_lstBxSettings" を変換しますヒットしたり、デフォルトではelseブロックになります。私がlistBoxIDパラメータを渡そうとしない場合、発生しません。

ここに何か不足しています。私のDataMemberの名前は何もしていないのですか?私は彼らが正しいプロパティにlistBoxIDをマップすると思った。このようなものに

答えて

2

変更:

public Reports ReportType { get; set; } 


[DataMember(Name = "listBoxID")] 
public string listBoxID 
{ 
    set 
    { 
     ReportType = DetermineReportType(value); 
    } 

}

基本的に、あなたはあなたのヘルパーメソッドなしReportにそのstringを変換することができますので。コンストラクタはデシリアライズ時に呼び出されていません

+0

それを行いました。ありがとうございました。 –

関連する問題