打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C#中如何处理Delphi的REST Server返回的复杂结构资料

Delphi REST Server返回的资料是JSON格式,假设有这样一个函数:

  1.   THMI=class  
  2.   public  
  3.     Mac:string;  
  4.     IP:string;  
  5.     Port:integer;  
  6.     //DateTime格式,delphi的Json封装在ASP.Net中会报错“Date格式未按 JSON 的要求以“//Date(”开始并以“)//”结束”  
  7.     LoginTime:Double;  
  8.     Status:integer;  
  9.   end;  
  10.   
  11.   THMIList=class  
  12.   public  
  13.     List:array of THMI;  
  14.   end;  
  15. function TRemoteDiagnose.GetMachineList4(AClientGUID,AHMIMac:string): THMIList;  
  16. var  
  17.   vResult:OLEVariant;  
  18.   i: Integer;  
  19. begin  
  20.   vResult:=Call('iService.Diagnose','GetHMIMachineList',VarArrayOf([AClientGUID,AHMIMac]));  
  21.   Result:=THMIList.Create;  
  22.   if VarIsNull(vResult) then  
  23.     SetLength(Result.List,0)  
  24.   else  
  25.   begin  
  26.     SetLength(Result.List,VarArrayHighBound(vResult,1)+1);  
  27.     for i := VarArrayLowBound(vResult,1to VarArrayHighBound(vResult,1do  
  28.     begin  
  29.       Result.List[i]:=THMI.Create;  
  30.       Result.List[i].Mac:=vResult[i][0];  
  31.       Result.List[i].IP:=vResult[i][1];  
  32.       Result.List[i].Port:=vResult[i][2];  
  33.       Result.List[i].LoginTime:=vResult[i][3];  
  34.       Result.List[i].Status:=vResult[i][4];  
  35.     end;  
  36.   end;  
  37. end;  

返回的JSON格式资料如下:

  1. {"result":[{"type":"ServerMethods_remotediagnose.THMIList","id":1,"fields":{"List":[{"type":"ServerMethods_remotediagnose.THMI","id":2,"fields":{"IP":"192.18.1.1","Port":1235,"LoginTime":40588.5982470602}},{"type":"ServerMethods_remotediagnose.THMI","id":3,"fields":{"IP":"192.18.1.2","Port":1236,"LoginTime":40588.5982470602}}]}}]}  
  

在C#中如何调用和解析呢?

[c-sharp] view plaincopy?
  1. public class THMI_Fields  
  2. {  
  3.     public string Mac { getset; }  
  4.     public string IP { getset; }  
  5.     public int Port { getset; }  
  6.     //DelphiXE的DateTime格式未按 JSON 的要求以“//Date(”开始并以“)//”结束。  
  7.     public Double LoginTime { get;set;}  
  8.     public DateTime LoginTime2  
  9.     {  
  10.         get{  
  11.             return DateTime.FromOADate(LoginTime);  
  12.         }  
  13.     }  
  14.     public int Status { getset; }  
  15. }  
  16.   
  17. public class THMI  
  18. {  
  19.     public string type { getset; }  
  20.     public int id { getset; }  
  21.     public THMI_Fields fields { getset; }  
  22. }  
  23. public class THMIList_Fields  
  24. {  
  25.     public THMI[] List { getset; }  
  26. }  
  27.   
  28. public class THMIList  
  29. {  
  30.     public string type{ getset; }  
  31.     public int id { getset; }  
  32.     public THMIList_Fields fields { getset; }  
  33. }  
  34.   
  35. public class THMIList_Json  
  36. {  
  37.     public THMIList[] result { getset; }  
  38. }  
  39.   
  40. public void CallREST()  
  41.         HttpWebRequest vWR;  
  42.         HttpWebResponse vRes;  
  43.         Stream vStream;  
  44.         THMIList_Json vObject;  
  45.         System.Runtime.Serialization.Json.DataContractJsonSerializer f;  
  46.           
  47.         vURL = ConfigurationManager.AppSettings["RESTServerURL"] + "TRemoteDiagnose/GetMachineList4/"+g_ClientGUID;  
  48.         vWR = (HttpWebRequest)WebRequest.Create(vURL);  
  49.         vWR.Method = "GET";  
  50.   
  51.         using (vRes = (HttpWebResponse)vWR.GetResponse())  
  52.         {  
  53.             vStream = vRes.GetResponseStream();  
  54.               
  55.             f = new DataContractJsonSerializer(typeof(THMIList_Json));  
  56.             vObject = (THMIList_Json)f.ReadObject(vStream);  
  57.              
  58.             vRes.Close();  
  59.         }  
  60. {  

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Delphi中TDateTime使用心得
Delphi中ini文件读取的Value超长问题
Json to lst lst to json
SpringSide开发实战(四):打通数据持久层的任督二脉 - 海边沫沫 - BlogJ...
OkHttp上传Json数据
序列化json
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服