2017-07-18 38 views
0

當我嘗試使用deserilizeobject時,出現'Error轉換值'。我的客戶有時會發送帶有引號和特殊字符的數據。它在嘗試序列化時起作用。但是,當我嘗試去淡化它時,它不起作用。我試着用escapehtml,但仍然有同樣的問題。它看起來像'SerializeObject'不是拋出錯誤信息,這意味着它是有效的JSON。請讓我知道如何解決這個問題。JSON反序列化對象錯誤轉換值

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); 

當您嘗試序列化字符串時,它也將Deserialze字符串也。在某些時候這樣做沒有意義。

此外,如果你想從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);