2013-08-09 7 views
5

私のC#クライアントからJSON文字列をWebサービスに渡しています。私は次のコードJSON文字列からObjectを構築できません

class DataDC 
{ 

    public String attr { get; set; } 
    public String attrVal { get; set; } 

} 

JavaScriptSerializer json_serializer = new JavaScriptSerializer(); 
DataDC dc = (DataDC)json_serializer.DeserializeObject(str); 

を使用して、サービス終了時

私は次のエラーを取得する:私は

"{\" "\" S1 \名\を "}" を送信文字列は次のとおり

" 'System.Collections.Generic.Dictionary`2 [可能System.String、System.Objectの]' 'DataDC' を入力するタイプのオブジェクトをキャストすることができません。"

+0

jsonのクラスプロパティのようにクラスプロパティの名前を指定する必要があります – makim

+1

jsonデシリアライザは、どのようにDataDCオブジェクトについて知っていると思いますか? – njzk2

答えて

20

が、それはあなたのクラスにデシリアライズするために、このようなことはないはずです。

JavaScriptSerializer json_serializer = new JavaScriptSerializer(); 
DataDC dc = json_serializer.Deserialize<DataDC>(str); 

もう一つは、ドンは、あなたのモデルクラスにNameパラメータを持っているあなたはので、何もそれに渡されないことです。 あなたのJSONは次のようにする必要があります: "{\"

またはあなたのモデルクラスを変更します。

のattr \: "\ "いくつかの値\いくつかの値\ "\" てattrVal \ "\""}"
class DataDC { 
    public String name{ get; set; }  
} 
+0

作品.thks –

+0

@sameer 2つの提案のどちらがあなた(または両方)に役立ったのかご教示ください。 – elolos

+0

@elolos最初の –

0

あなたがそれを逆シリアル化できない理由は、クラスのように全く見えないからです。あなたのJSON文字列/オブジェクトはこれが機能するためにはDataDC

のプロパティのいずれかと一致していない、あなたは、少なくともプロパティが呼び出されている必要があるでしょう

public class DataDC 
{ 
    public string name{get; set;} 
} 
1

:あなたはこのようなクラスを作成する必要がありますクラス内の名前。例えば

public class DataDC 
{ 

    public string name { get; set; } 
    public string attr { get; set; } 
    public string attrVal { get; set; } 

} 

このようにして、1つのプロパティを一致させることができます。

既存のクラスを使用するには、次のJson文字列が必要です。

"{ \"attr\":\"S1\", \"attrVal\":\"V1\" }" 

注:次のコードを使用して逆シリアル化することもできます。

DataDC dc = json_serializer.Deserialize<DataDC>(str); 
+0

まだ同じエラーが発生します –

関連する問題