2017-07-18 32 views
0

deserilizeobjectを使用しようとすると「値を変換中にエラーが発生しました」というメッセージが表示されます。私のクライアントは、引用符と特殊文字を含むデータを送信することがあります。彼らはそれをシリアル化しようとすると動作します。しかし、私はそれをdeserilizeしようとすると動作しません。私はescapehtmlで試したが、それでも私は同じ問題がある。 'SerializeObject'が有効なJSONを意味するエラーメッセージをスローしていないようです。この問題を解決する方法を教えてください。JSON DeserializeObject値の変換中にエラーが発生しました

string json2 = @"{ 
    'RootObject1':{ 
    't_date': '03-JAN-2016', 
    't_summary': 'test """"""""""""' 
    } 
}"; 


var json3 = JsonConvert.SerializeObject(json2, Newtonsoft.Json.Formatting.None, new Newtonsoft.Json.JsonSerializerSettings{ StringEscapeHandling = Newtonsoft.Json.StringEscapeHandling.EscapeHtml }); 

var myJsonObject = JsonConvert.DeserializeObject<RootObject1>(json3); 

class RootObject1 
{ 
    public string t_date { get; set; } 
    public string t_summary { get; set; } 
} 
+0

'RootObject'クラスのコードを追加しました –

+0

RootObjectコードを追加します。 – nav100

+1

文字列を 'json3'にシリアライズするので、オブジェクトに逆シリアル化しないようにします。文字列だけです。 –

答えて

0

これは、あなたがJsonConvert.SerializeDeserializeを使用する必要がありますどのように正しい方法ではありません。
最初にオブジェクトを文字列にシリアル化し、文字列からオブジェクトに逆直列化する必要があります。ここにその例を示します。

RootObject1 ro = new RootObject1(); 
ro.t_date = "03-JAN-2016"; 
ro.t_summary = @"test """""""""""""; 
var json3 = JsonConvert.SerializeObject(ro, typeof(RootObject1), Newtonsoft.Json.Formatting.None, new Newtonsoft.Json.JsonSerializerSettings { StringEscapeHandling = Newtonsoft.Json.StringEscapeHandling.EscapeHtml }); 
var myJsonObject = JsonConvert.DeserializeObject<RootObject1>(json3); 
Console.WriteLine(myJsonObject.t_date + "\t" + myJsonObject.t_summary); 

文字列をシリアライズしようとすると、文字列もまたデシリアライズされます。そして、それはある意味では意味がありません。

JSON文字列からオブジェクトを取得する場合は、Deserealizationを実行し、JSON文字列が無効である必要があります。ここでは、それを達成する方法の例です:

string json2 = @"{ 
     't_date': '03-JAN-2016', 
     't_summary': 'test """"""""""""' 
    }"; 
var obj = JsonConvert.DeserializeObject<RootObject1>(json2); 
Console.WriteLine(obj.t_date + "\t" + obj.t_summary); 
関連する問題