zoukankan      html  css  js  c++  java
  • JSON格式对接过程随笔

     if (dr.Table.Columns[j].DataType.ToString() == "System.DateTime")
    {
         if (dr[dr.Table.Columns[j].ColumnName.ToString()] != DBNull.Value)
         {
              result += AddDoubleYH(Convert.ToDateTime(dr[dr.Table.Columns[j].ColumnName.ToString()]).ToString("yyyy-MM-dd HH:mm:ss"));
               //result += JsonConvert.SerializeObject(dr[dr.Table.Columns[j].ColumnName.ToString()]);
            }
    }
    
    result_memo":"RuntimeException: com.fasterxml.jackson.databind.exc.InvalidFormatException: Can not construct instance of java.util.Date from String value '2017-07-19 08:08:08': not a valid representation (error: Failed to parse Date value '2017-07-19 08:08:08': Can not parse date "2017-07-19 08:08:08": not compatible with any of standard forms ("yyyy-MM-dd'T'HH:mm:ss.SSSZ", "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", "EEE, dd MMM yyyy HH:mm:ss zzz", "yyyy-MM-dd"))
    

    解决方法:

    C#端使用下面的代码时,java可以成功交易,但是接收到日期时间数据与C#端相差8个小时

    result += JsonConvert.SerializeObject(dr[dr.Table.Columns[j].ColumnName.ToString()]);


    随后,java端做了修改调整,使用tostring("")做的交易

    转义字符""

     private string queryStatus()
            {
                 //构造url
                var baseUrl = "http://yesfp.yonyoucloud.com";
                var url = baseUrl + "/invoiceclient-web/api/invoiceApply/queryInvoiceStatus?appid=yesfpTester";
                var req = (HttpWebRequest)WebRequest.Create(url);
    
                var paraEnvoice = "fpqqlsh=" + saleNum;
                var param = paraEnvoice;
    
    
                //设置消息头
                // var bs = Encoding.ASCII.GetBytes(param);
                var bs = Encoding.UTF8.GetBytes(param);
                req.Method = "POST";
                req.ContentType = "application/x-www-form-urlencoded;charset=" + Encoding.UTF8.WebName;
                req.Headers.Add("sign", Sign(paraEnvoice)); //放入签名信息在消息头
                req.ContentLength = bs.Length;
    
                //发送请求
                using (var reqStream = req.GetRequestStream())
                {
                    reqStream.Write(bs, 0, bs.Length);
                    reqStream.Close();
                }
    
                //获取请求
                using (var response = (HttpWebResponse)req.GetResponse())
                {
                    var responseStream = response.GetResponseStream();
    
                    if (responseStream == null)
                    {
                        return "false";
                    }
                    using (var reader = new StreamReader(responseStream, Encoding.UTF8))
                    {
                        var responseData = reader.ReadToEnd();
    
                        eInvoiceQRet qret = JsonConvert.DeserializeObject<eInvoiceQRet>(responseData);
                        if (qret.statuscode == publicInfo.EINVOICE_Q_SUC)
                        {
                            JObject urlret = (JObject)JsonConvert.DeserializeObject(qret.data);
                            eInvoiceUrlData urldata = JsonConvert.DeserializeObject<eInvoiceUrlData>(urlret["data"].ToString());
                            return "true";
                        }
                        return "false";
                    }
                }
            }

    直接使用eInvoiceQRet转换时,发现“{"fpqqlsh":"300011700040092","code":"0000","msg":"查询成功","statuscode":"4","status":"开票成功","data":"{"data":"{\"bmbBbh\":\"13.0\",\"bz……”内嵌的data含有转义符号,DeserializeObject发生异常未处理Newtonsoft.Json.JsonSerializationException。

    解决方法:见上面代码,采用string先取出数据后,再转成相应对象

     

  • 相关阅读:
    hdu5728 PowMod
    CF1156E Special Segments of Permutation
    CF1182E Product Oriented Recurrence
    CF1082E Increasing Frequency
    CF623B Array GCD
    CF1168B Good Triple
    CF1175E Minimal Segment Cover
    php 正则
    windows 下安装composer
    windows apache "The requested operation has failed" 启动失败
  • 原文地址:https://www.cnblogs.com/songyulan/p/7211027.html
Copyright © 2011-2022 走看看