JSON DeserializeObject转换值时出错

时间:2017-07-18 15:27:58

标签: c# json json.net

当我尝试使用deserilizeobject时,我收到'错误转换值'。我的客户端有时会发送带引号和特殊字符的数据。它在尝试序列化时有效。但是当我试图去除它时,它不起作用。我尝试使用escapehtml但仍然有同样的问题。看起来'SerializeObject'不会抛出错误消息,这意味着它是有效的JSON。请让我知道如何解决这个问题。

{{1}}

1 个答案:

答案 0 :(得分:1)

这不是您使用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);