解析值{时遇到意外字符。路径”,第1行,位置1。位于Newtonsoft.Json.JsonTextReader.ReadStringValue?

时间:2018-11-21 16:22:57

标签: c# json json.net restsharp

在尝试将json字符串从http响应转换为对象时,我遇到以下错误消息:

  

异常:解析值{时遇到意外字符。   路径'',第1行,位置1。   Newtonsoft.Json.JsonTextReader.ReadStringValue   (Newtonsoft.Json.ReadType readType)[0x002d8]在   :0处   Newtonsoft.Json.JsonTextReader.ReadAsString()[0x00000]在   :0处   Newtonsoft.Json.JsonReader.ReadForType   (Newtonsoft.Json.Serialization.JsonContract合同,System.Boolean   hasConverter)[0x000c2] in:0 at   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize   (Newtonsoft.Json.JsonReader阅读器,System.Type objectType,   System.Boolean checkAdditionalContent)[0x000db]在   :0处   Newtonsoft.Json.JsonSerializer.DeserializeInternal   (Newtonsoft.Json.JsonReader阅读器,System.Type objectType)[0x00054]   在:0处   Newtonsoft.Json.JsonSerializer.Deserialize(Newtonsoft.Json.JsonReader   阅读器,System.Type objectType)[0x00000]在   :0处   Newtonsoft.Json.JsonConvert.DeserializeObject(System.String值,   System.Type类型,Newtonsoft.Json.JsonSerializerSettings设置)   [0x0002d]在:0处   Newtonsoft.Json.JsonConvert.DeserializeObject [T](System.String值,   Newtonsoft.Json.JsonSerializerSettings设置)[0x00000]在<   d32db49e5e3440729da31845c03ddc3a>:0 at   Newtonsoft.Json.JsonConvert.DeserializeObject [T](System.String值)   [0x00000]在:0处   JmJmApp.Helpers.API.DetalhesChamado(System.String   IdentificadorChamado)[0x0004b]在   C:\ Users .. \ JmJmApp \ JmJmApp \ JmJmApp \ Helpers \ API.cs:262

这是我正在使用的代码:

        public static object DetalhesChamado(string IdentificadorChamado)
        {
            /* inicio da requisição para a api rest */
            var client = new RestClient("https://api.tomticket.com/chamado/8....8d65/0e8963d....7bfe25612ae78");
            var request = new RestRequest(Method.GET);

             request.RequestFormat = DataFormat.Json;
            //request.AddHeader("content-type", "application/json; charset=utf-8");


            IRestResponse response = client.Execute(request);
            var encoding = response.ContentEncoding;

            if (response.ResponseStatus == ResponseStatus.Completed) // Verifica se foi possivel acessar o servidor
            {
                try
                {
                    //byte[] encodedBytes = Encoding.UTF8.GetBytes(response.Content);

                    var string_json = JsonConvert.DeserializeObject<string>(response.Content);

                    var resposta = JsonConvert.DeserializeObject<ChamadoData>(string_json);


                    //var resposta = JsonConvert.DeserializeObject<ChamadoData>( string_json );

                    return resposta;
                }
                catch (Exception e)
                {

                    return false; // Falha ao deserializar
                }
            }
            else
            {
                return false; // Sem conexão a internet
            }

        }

这是Visual Studio调试显示的响应:

{\"erro\":false,\"data\":{\"idchamado\":\"0e8963dde6ff227c5917bfe25612ae78\",\"protocolo\":80,\"titulo\":\"Veda\\u00e7\\u00e3o e desempenho- Garantia Vencida\",\"mensagem\":\"Mensagem: Est\\u00e1 vazando g\\u00e1s no meu ap\\nNome do Empreendimento :Copacabana\\n Numero da Unidade :43\",\"mimetype\":\"text\\/plain\",\"email_cliente\":\"teste@example.com\",\"prioridade\":1,\"tempotrabalho\":0,\"tempoabertura\":null,\"data_criacao\":\"21\\/11\\/2018 10:32\",\"deadline\":null,\"valoritemhora\":0,\"valoritemhoraextra\":0,\"valorfinal\":0,\"valorfinalextra\":0,\"valorfinalbruto\":0,\"nomecliente\":\"cliente teste\",\"tipochamado\":\"Externo\",\"avaliadoproblemaresolvido\":null,\"avaliadoatendimento\":null,\"avaliacaocomentario\":null,\"dataencerramento\":null,\"ultimasituacao\":3,\"dataultimasituacao\":\"21\\/11\\/2018 10:36\",\"descsituacao\":\"Respondido pelo cliente, aguardando resposta\",\"categoria\":null,\"departamento\":\"Suporte Usu\\u00e1rio\",\"atendente\":null,\"id_cliente\":\"teste@example.com\",\"status\":null,\"dataultimostatus\":null,\"nomeorganizacao\":null,\"campospersonalizados\":[],\"campospersonalizados_finalizados\":[],\"anexos\":[],\"historico\":[{\"origem\":\"C\",\"mensagem\":\"Passado 72 horas e ainda n\\u00e3o recebi retorno\",\"mimetype\":\"text\\/plain\",\"atendente\":null,\"data_hora\":\"21\\/11\\/2018 10:36\",\"hora_inicio\":null,\"hora_fim\":null,\"anexos\":[]}],\"historico_status\":[]}}"

enter image description here 这是我用作目标的类。

public class Historico
{
    public string origem { get; set; }
    public string mensagem { get; set; }
    public string mimetype { get; set; }
    public object atendente { get; set; }
    public string data_hora { get; set; }
    public object hora_inicio { get; set; }
    public object hora_fim { get; set; }
    public IList<object> anexos { get; set; }
}

public class ChamadoData
{
    public string idchamado { get; set; }
    public int protocolo { get; set; }
    public string titulo { get; set; }
    public string mensagem { get; set; }
    public string mimetype { get; set; }
    public string email_cliente { get; set; }
    public int prioridade { get; set; }
    public int tempotrabalho { get; set; }
    public object tempoabertura { get; set; }
    public string data_criacao { get; set; }
    public object deadline { get; set; }
    public int valoritemhora { get; set; }
    public int valoritemhoraextra { get; set; }
    public int valorfinal { get; set; }
    public int valorfinalextra { get; set; }
    public int valorfinalbruto { get; set; }
    public string nomecliente { get; set; }
    public string tipochamado { get; set; }
    public object avaliadoproblemaresolvido { get; set; }
    public object avaliadoatendimento { get; set; }
    public object avaliacaocomentario { get; set; }
    public object dataencerramento { get; set; }
    public int ultimasituacao { get; set; }
    public string dataultimasituacao { get; set; }
    public string descsituacao { get; set; }
    public object categoria { get; set; }
    public string departamento { get; set; }
    public object atendente { get; set; }
    public string id_cliente { get; set; }
    public object status { get; set; }
    public object dataultimostatus { get; set; }
    public object nomeorganizacao { get; set; }
    public IList<object> campospersonalizados { get; set; }
    public IList<object> campospersonalizados_finalizados { get; set; }
    public IList<object> anexos { get; set; }
    public IList<Historico> historico { get; set; }
    public IList<object> historico_status { get; set; }
}

public class Historico
{
    public bool erro { get; set; }
    public Data data { get; set; }
}

我已经在Google上搜索了一个解决方案,但没有一个适合我。

有人知道如何解决此问题吗?

1 个答案:

答案 0 :(得分:0)

正如评论中提到的,这可能是由于双重序列化json引起的。有时发生这种情况是因为您将json作为字符串通过电线传递了。因此,您将其编码为字符串,然后使用的REST框架将再次对其进行序列化。因此,在接收端,您将需要进行两次脱盐处理,或者不将字符串传递到电线上,而是将原始的复杂物体通过。