• 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先取出数据后,再转成相应对象

     

  • 相关阅读:
    vue中处理过内存泄露处理方法
    Nuxt2.x项目实战相关问题记录
    Android 7.0+模拟器Fiddler抓包详细教程 fiddler443问题解决办法
    inspeckage
    yile接口
    入坑Vue(二)Node.js环境安装
    入坑Vue(一)简介
    入库Vue(三) vuecli全局安装,创建Vue项目
    入坑vue(三)安装VSCode
    入坑Vue(四) 引用element ui组件,配置登录
  • 原文地址:https://www.cnblogs.com/songyulan/p/7211027.html
Copyright © 2020-2023  润新知