C# 接收利用u001E u001D 字串且轉成陣列

  • 1633
  • 0
  • C#
  • 2019-03-20

當初透過API接收到這串字串時很困擾,因為他不是JSON格式而是透過u001E u001D去分隔

u001E 代表分行 u001D 代表 兩個欄位去分開

這邊只是記錄一下,若下次再碰到此種狀況就可以利用split去分割


 

這是我call API 所接收到的一串字串,他是利用uniCode去編碼。

因為當初發現不是JSON格式時覺得很頭痛,但後來發現 \u001E 屬於分行 \u001D 屬於欄位分隔

可以看出這個回傳的欄位有兩個 一個叫做 EMP_NO 一個則是NAME

起初,我覺得這個就是JSON格式,但是怎麼又不太像。去詢問寫API的他說他不是JSON是字串。

先來看一下我們在c#中接收到實string data 到底接收到什麼東西

並且檢查了response.contentType 我發現他是 text/html ,而不是application/json 

因此判定他其實有json parse

雖說他回傳出來的樣子不像是JSON格式,但我們仍需要deserialze 這個data 才可解析

再者,因為他是透過\u001E  \u001D 來做區隔

所以我們先將\u001E 轉成陣列 再將每一個陣列值再分割並且注入 ArrayList裡面

完整代碼

public class A{
  public ArrayList selLeaveEmp(string userID)
  {
     MySqlConnection conn = openMysqlConnection();

     ArrayList leaveEmpArr = new ArrayList();
     
     string empData = "";
     string sysTime = System.DateTime.Now.AddDays(1).ToString("yyyyMMdd");

     try
     {
        string url = "http://7/datasnap/rest/TServerMethods1/Call_Server/PQR:";
        
        HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
        req.Method = "GET";
        using (WebResponse wr = req.GetResponse())
        {
           using (StreamReader myStreamReader = new StreamReader(wr.GetResponseStream()))
           {
               string data = myStreamReader.ReadToEnd();
               LeaveEmp rt = JsonConvert.DeserializeObject<LeaveEmp>(data);
               empData = rt.result[0];

                string[] Split = empData.Split('\u001E');
                for (int i = 0; i < Split.Length; i++)
                {
                    string[] a = Split[i].Split('\u001d');
                    for(int j = 0; j < a.Length; j++)
                    {
                      leaveEmpArr.Add(a[j]);
                    }
                           
                }
                    myStreamReader.Close();
             }
         }
     }
  catch (Exception ex)
  {
     Console.Write(ex.ToString());
     using (StreamWriter sw = File.AppendText(path2))
     {
         sw.WriteLine("selLeaveEmp ERROR");

     }
   }
  finally
  {
      conn.Close();
  }
  return leaveEmpArr;
 }
}

public class LeaveEmp
{
   public List<string> result { get; set; }
}