/// <summary> /// 推送纯文字————跳到客服 /// </summary> /// <param name="id"></param> /// <returns></returns> public IResponseMessageBase GetResponseMessageTxt_kefu(RequestMessageText requestMessage, int Indexid, int wid) { var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageTransfer_Customer_Service>(requestMessage); string openid = requestMessage.FromUserName; string token = ConvertDateTimeInt(DateTime.Now).ToString(); // requestMessage.Content = "欢迎咨询"; string xml = " <xml><ToUserName><![CDATA[" + responseMessage.FromUserName + "]]></ToUserName> <FromUserName><![CDATA[" + responseMessage.ToUserName + "]]></FromUserName> <CreateTime>" + responseMessage.CreateTime + "</CreateTime> <MsgType><![CDATA[" + responseMessage.MsgType + "]]></MsgType> <TransInfo> <KfAccount><![CDATA[kf2001@anju0088]]></KfAccount></TransInfo></xml>"; // ResponseMessageBase.CreateFromResponseXml(xml); var result = UserApi.Info(stoce(), openid); string pickname = result.nickname; string image = result.headimgurl; // string xml = " <xml><ToUserName><![CDATA[" + responseMessage.FromUserName + "]]></ToUserName> <FromUserName><![CDATA[" + responseMessage.ToUserName + "]]></FromUserName> <CreateTime>" + responseMessage.CreateTime + "</CreateTime> <MsgType><![CDATA["+responseMessage.MsgType+"]]></MsgType> <TransInfo> <KfAccount><![CDATA[VIP_zql_99@anju0088]]></KfAccount></TransInfo></xml>"; //ResponseMessageTransfer_Customer_Service.CreateFromResponseXml(xml); wxResponseBaseMgr.Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), requestMessage.Content, "Transfer_Customer_Service", responseMessage.MsgType.ToString(), requestMessage.ToUserName, pickname, image); //responseMessage.Content ="openid=" + requestMessage.FromUserName; CustomerServiceAccount ss = new CustomerServiceAccount(); ss.KfAccount = "kf2001@anju0088"; List <CustomerServiceAccount> listss = new List <CustomerServiceAccount>(); listss.Add(ss); responseMessage.TransInfo = listss; return(responseMessage); }
public virtual ResponseMessageBase ToResponseMessage() { var res = new ResponseMessageTransfer_Customer_Service(); foreach (var tras in this.TransInfo) { var a = new CustomerServiceAccount() { KfAccount = tras.KfAccount, }; res.TransInfo.Add(a); } return(res); }
public IResponseMessageBase GetResponseMessageTxt_kefu2(RequestMessageText requestMessage, int Indexid, int wid) { if (requestMessage.Content == "连接客服") { var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageTransfer_Customer_Service>(requestMessage); string openid = requestMessage.FromUserName; string token = ConvertDateTimeInt(DateTime.Now).ToString(); var result = UserApi.Info(stoce(), openid); string pickname = result.nickname; string image = result.headimgurl; wxResponseBaseMgr.Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), requestMessage.Content, "Transfer_Customer_Service", responseMessage.MsgType.ToString(), requestMessage.ToUserName, pickname, image); CustomerServiceAccount ss = new CustomerServiceAccount(); ss.KfAccount = "VIP_zql_99@anju0088"; List <CustomerServiceAccount> listss = new List <CustomerServiceAccount>(); listss.Add(ss); responseMessage.TransInfo = listss; return(responseMessage); } else { var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageText>(requestMessage); string openid = requestMessage.FromUserName; string token = ConvertDateTimeInt(DateTime.Now).ToString(); var result = UserApi.Info(stoce(), openid); string pickname = result.nickname; string image = result.headimgurl; responseMessage.Content = getDataTxtComm(wid, Indexid, openid, token); wxResponseBaseMgr.Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), requestMessage.Content, "text", responseMessage.Content, requestMessage.ToUserName, pickname, image); //responseMessage.Content ="openid=" + requestMessage.FromUserName; return(responseMessage); } }
/// <summary> /// 添加客服帐号 /// </summary> /// <param name="accessToken"></param> /// <param name="kf_account"></param> /// <param name="nickname"></param> /// <returns></returns> public static CustomerServiceCreateAccountResponse CreateCustomerServiceAccount(string accessToken, string kf_account, string nickname) { CustomerServiceAccount msg = new CustomerServiceAccount() { AccessToken = accessToken, kf_account = kf_account, nickname = nickname }; IMpClient mpClient = new MpClient(); string sendData = msg.ToJsonString(); CustomerServiceCreateAccountRequest request = new CustomerServiceCreateAccountRequest() { AccessToken = accessToken, SendData = sendData }; CustomerServiceCreateAccountResponse response = mpClient.Execute(request); if (response.IsError) { Utility.LogHelper.WriteDebug("创建客服", sendData); Utility.LogHelper.WriteDebug("创建客服", response.Body); } return(response); }
/// <summary> /// 根据XML信息填充实实体 /// </summary> /// <typeparam name="T">MessageBase为基类的类型,Response和Request都可以</typeparam> /// <param name="entity">实体</param> /// <param name="doc">XML</param> public static void FillEntityWithXml <T>(this T entity, XDocument doc) where T : /*MessageBase*/ class, new() { entity = entity ?? new T(); var root = doc.Root; var props = entity.GetType().GetProperties(); foreach (var prop in props) { var propName = prop.Name; if (root.Element(propName) != null) { switch (prop.PropertyType.Name) { //case "String": // goto default; case "DateTime": prop.SetValue(entity, DateTimeHelper.GetDateTimeFromXml(root.Element(propName).Value), null); break; case "Boolean": if (propName == "FuncFlag") { prop.SetValue(entity, root.Element(propName).Value == "1", null); } else { goto default; } break; case "Int32": prop.SetValue(entity, int.Parse(root.Element(propName).Value), null); break; case "Int64": prop.SetValue(entity, long.Parse(root.Element(propName).Value), null); break; case "Double": prop.SetValue(entity, double.Parse(root.Element(propName).Value), null); break; //以下为枚举类型 case "RequestMsgType": //已设为只读 //prop.SetValue(entity, MsgTypeHelper.GetRequestMsgType(root.Element(propName).Value), null); break; case "ResponseMsgType": //Response适用 //已设为只读 //prop.SetValue(entity, MsgTypeHelper.GetResponseMsgType(root.Element(propName).Value), null); break; case "Event": //已设为只读 //prop.SetValue(entity, EventHelper.GetEventType(root.Element(propName).Value), null); break; //以下为实体类型 case "List`1": //List<T>类型,ResponseMessageNews适用 var genericArguments = prop.PropertyType.GetGenericArguments(); if (genericArguments[0].Name == "Article") //ResponseMessageNews适用 { //文章下属节点item List <Article> articles = new List <Article>(); foreach (var item in root.Element(propName).Elements("item")) { var article = new Article(); FillEntityWithXml(article, new XDocument(item)); articles.Add(article); } prop.SetValue(entity, articles, null); } else if (genericArguments[0].Name == "Account") { List <CustomerServiceAccount> accounts = new List <CustomerServiceAccount>(); foreach (var item in root.Elements(propName)) { var account = new CustomerServiceAccount(); FillEntityWithXml(account, new XDocument(item)); accounts.Add(account); } prop.SetValue(entity, accounts, null); } else if (genericArguments[0].Name == "PicItem") { List <PicItem> picItems = new List <PicItem>(); foreach (var item in root.Elements(propName).Elements("item")) { var picItem = new PicItem(); var picMd5Sum = item.Element("PicMd5Sum").Value; Md5Sum md5Sum = new Md5Sum() { PicMd5Sum = picMd5Sum }; picItem.item = md5Sum; picItems.Add(picItem); } prop.SetValue(entity, picItems, null); } break; case "Music": //ResponseMessageMusic适用 Music music = new Music(); FillEntityWithXml(music, new XDocument(root.Element(propName))); prop.SetValue(entity, music, null); break; case "Image": //ResponseMessageImage适用 Image image = new Image(); FillEntityWithXml(image, new XDocument(root.Element(propName))); prop.SetValue(entity, image, null); break; case "Voice": //ResponseMessageVoice适用 Voice voice = new Voice(); FillEntityWithXml(voice, new XDocument(root.Element(propName))); prop.SetValue(entity, voice, null); break; case "Video": //ResponseMessageVideo适用 Video video = new Video(); FillEntityWithXml(video, new XDocument(root.Element(propName))); prop.SetValue(entity, video, null); break; case "ScanCodeInfo": //扫码事件中的ScanCodeInfo适用 ScanCodeInfo scanCodeInfo = new ScanCodeInfo(); FillEntityWithXml(scanCodeInfo, new XDocument(root.Element(propName))); prop.SetValue(entity, scanCodeInfo, null); break; case "SendLocationInfo": //弹出地理位置选择器的事件推送中的SendLocationInfo适用 SendLocationInfo sendLocationInfo = new SendLocationInfo(); FillEntityWithXml(sendLocationInfo, new XDocument(root.Element(propName))); prop.SetValue(entity, sendLocationInfo, null); break; case "SendPicsInfo": //系统拍照发图中的SendPicsInfo适用 SendPicsInfo sendPicsInfo = new SendPicsInfo(); FillEntityWithXml(sendPicsInfo, new XDocument(root.Element(propName))); prop.SetValue(entity, sendPicsInfo, null); break; default: prop.SetValue(entity, root.Element(propName).Value, null); break; } } } }
/// <summary> /// 根据XML信息填充实实体 /// </summary> /// <typeparam name="T">MessageBase为基类的类型,Response和Request都可以</typeparam> /// <param name="entity">实体</param> /// <param name="doc">XML</param> public static void FillEntityWithXml <T>(this T entity, XDocument doc) where T : /*MessageBase*/ class, new() { entity = entity ?? new T(); var root = doc.Root; if (root == null) { return;//无法处理 } var props = entity.GetType().GetProperties(); foreach (var prop in props) { var propName = prop.Name; if (root.Element(propName) != null) { switch (prop.PropertyType.Name) { //case "String": // goto default; case "DateTime": case "Int32": case "Int64": case "Double": case "Nullable`1": //可为空对象 EntityUtility.FillSystemType(entity, prop, root.Element(propName).Value); break; case "Boolean": if (propName == "FuncFlag") { EntityUtility.FillSystemType(entity, prop, root.Element(propName).Value == "1"); } else { goto default; } break; //以下为枚举类型 case "RequestMsgType": //已设为只读 //prop.SetValue(entity, MsgTypeHelper.GetRequestMsgType(root.Element(propName).Value), null); break; case "ResponseMsgType": //Response适用 //已设为只读 //prop.SetValue(entity, MsgTypeHelper.GetResponseMsgType(root.Element(propName).Value), null); break; case "Event": //已设为只读 //prop.SetValue(entity, EventHelper.GetEventType(root.Element(propName).Value), null); break; //以下为实体类型 case "List`1": //List<T>类型,ResponseMessageNews适用 { var genericArguments = prop.PropertyType.GetGenericArguments(); var genericArgumentTypeName = genericArguments[0].Name; if (genericArgumentTypeName == "Article") { //文章下属节点item List <Article> articles = new List <Article>(); foreach (var item in root.Element(propName).Elements("item")) { var article = new Article(); FillEntityWithXml(article, new XDocument(item)); articles.Add(article); } prop.SetValue(entity, articles, null); } else if (genericArgumentTypeName == "Account") { List <CustomerServiceAccount> accounts = new List <CustomerServiceAccount>(); foreach (var item in root.Elements(propName)) { var account = new CustomerServiceAccount(); FillEntityWithXml(account, new XDocument(item)); accounts.Add(account); } prop.SetValue(entity, accounts, null); } else if (genericArgumentTypeName == "PicItem") { List <PicItem> picItems = new List <PicItem>(); foreach (var item in root.Elements(propName).Elements("item")) { var picItem = new PicItem(); var picMd5Sum = item.Element("PicMd5Sum").Value; Md5Sum md5Sum = new Md5Sum() { PicMd5Sum = picMd5Sum }; picItem.item = md5Sum; picItems.Add(picItem); } prop.SetValue(entity, picItems, null); } else if (genericArgumentTypeName == "AroundBeacon") { List <AroundBeacon> aroundBeacons = new List <AroundBeacon>(); foreach (var item in root.Elements(propName).Elements("AroundBeacon")) { var aroundBeaconItem = new AroundBeacon(); FillEntityWithXml(aroundBeaconItem, new XDocument(item)); aroundBeacons.Add(aroundBeaconItem); } prop.SetValue(entity, aroundBeacons, null); } else if (genericArgumentTypeName == "CopyrightCheckResult_ResultList") //RequestMessageEvent_MassSendJobFinish { List <CopyrightCheckResult_ResultList> resultList = new List <CopyrightCheckResult_ResultList>(); foreach (var item in root.Elements("ResultList").Elements("item")) { CopyrightCheckResult_ResultList resultItem = new CopyrightCheckResult_ResultList(); FillEntityWithXml(resultItem.item, new XDocument(item)); resultList.Add(resultItem); } prop.SetValue(entity, resultList, null); } break; } case "Music": //ResponseMessageMusic适用 FillClassValue <Music>(entity, root, propName, prop); break; case "Image": //ResponseMessageImage适用 FillClassValue <Image>(entity, root, propName, prop); break; case "Voice": //ResponseMessageVoice适用 FillClassValue <Voice>(entity, root, propName, prop); break; case "Video": //ResponseMessageVideo适用 FillClassValue <Video>(entity, root, propName, prop); break; case "ScanCodeInfo": //扫码事件中的ScanCodeInfo适用 FillClassValue <ScanCodeInfo>(entity, root, propName, prop); break; case "SendLocationInfo": //弹出地理位置选择器的事件推送中的SendLocationInfo适用 FillClassValue <SendLocationInfo>(entity, root, propName, prop); break; case "SendPicsInfo": //系统拍照发图中的SendPicsInfo适用 FillClassValue <SendPicsInfo>(entity, root, propName, prop); break; case "ChosenBeacon": //摇一摇事件通知 FillClassValue <ChosenBeacon>(entity, root, propName, prop); break; case "AroundBeacon": //摇一摇事件通知 FillClassValue <AroundBeacon>(entity, root, propName, prop); break; #region RequestMessageEvent_MassSendJobFinish case "CopyrightCheckResult": FillClassValue <CopyrightCheckResult>(entity, root, propName, prop); break; case "CopyrightCheckResult_ResultList_Item": FillClassValue <CopyrightCheckResult_ResultList_Item>(entity, root, "item", prop); break; #endregion default: var enumSuccess = false; if (prop.PropertyType.IsEnum) { //未知的枚举类型 try { prop.SetValue(entity, Enum.Parse(prop.PropertyType, root.Element(propName).Value, true), null); enumSuccess = true; } catch { } } if (!enumSuccess) { prop.SetValue(entity, root.Element(propName).Value, null); } break; } } } }
/// <summary> /// 跳转客服 /// </summary> /// <param name="requestMessage"></param> /// <param name="Indexid"></param> /// <param name="wid"></param> /// <returns></returns> /// public IResponseMessageBase GetResponseMessageTxt(RequestMessageText requestMessage, int Indexid, int wid) { BLL.wx_userweixin wBll = new XCWeiXin.BLL.wx_userweixin(); Model.wx_userweixin weixininfo = wBll.GetModel(wid); string weixincode = weixininfo.weixinCode; int contt = Account_count(); // if(a<contt) string str = requestMessage.Content; if (str.Contains("客服")) { string str_new = str.Replace("客服", ""); if (str_new == "1") { str_new = "4"; } if (str_new == "2") { str_new = "5"; } if (str_new == "3") { str_new = "6"; } string kfcoont = "kf200" + str_new + "@" + weixincode; if (Zaixian().Trim().ToString().Contains(kfcoont)) { var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageTransfer_Customer_Service>(requestMessage); string openid = requestMessage.FromUserName; string token = ConvertDateTimeInt(DateTime.Now).ToString(); var result = UserApi.Info(stoce(), openid); string pickname = result.nickname; string image = result.headimgurl; wxResponseBaseMgr.Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), requestMessage.Content, "Transfer_Customer_Service", responseMessage.MsgType.ToString(), requestMessage.ToUserName, pickname, image); CustomerServiceAccount ss = new CustomerServiceAccount(); ss.KfAccount = "kf200" + str_new + "@" + weixincode; List <CustomerServiceAccount> listss = new List <CustomerServiceAccount>(); listss.Add(ss); responseMessage.TransInfo = listss; return(responseMessage); } else { var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageText>(requestMessage); string openid = requestMessage.FromUserName; string token = ConvertDateTimeInt(DateTime.Now).ToString(); responseMessage.Content = getDataTxtComm(wid, Indexid, openid, token); var result = UserApi.Info(stoce(), openid); string pickname = result.nickname; string image = result.headimgurl; wxResponseBaseMgr.Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), requestMessage.Content, "text", responseMessage.Content, requestMessage.ToUserName, pickname, image); responseMessage.Content = "客服" + str_new + "不在线,请稍后再试!"; return(responseMessage); } } else { ///进入文字处理 var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageText>(requestMessage); string openid = requestMessage.FromUserName; string token = ConvertDateTimeInt(DateTime.Now).ToString(); responseMessage.Content = getDataTxtComm(wid, Indexid, openid, token); var result = UserApi.Info(stoce(), openid); string pickname = result.nickname; string image = result.headimgurl; wxResponseBaseMgr.Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), requestMessage.Content, "text", responseMessage.Content, requestMessage.ToUserName, pickname, image); //responseMessage.Content ="openid=" + requestMessage.FromUserName; return(responseMessage); } }
/// <summary> /// 推送纯文字 /// </summary> /// <param name="requestMessage"></param> /// <param name="Indexid"></param> /// <param name="wid"></param> /// <returns></returns> public IResponseMessageBase GetResponseMessageTxt_zhaohang(RequestMessageText requestMessage, int Indexid, int wid) { // if(a<contt) string str = requestMessage.Content; if (str.Contains("客服")) { BLL.wx_userweixin wBll = new XCWeiXin.BLL.wx_userweixin(); Model.wx_userweixin weixininfo = wBll.GetModel(wid); string weixincode = weixininfo.weixinCode; int contt = int.Parse(Account_count_1()); string str_new = str.Replace("客服", ""); if (int.Parse(str_new) > contt) { var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageText>(requestMessage); string openid = requestMessage.FromUserName; string token = ConvertDateTimeInt(DateTime.Now).ToString(); responseMessage.Content = getDataTxtComm(wid, Indexid, openid, token); var result = UserApi.Info(stoce(), openid); string pickname = result.nickname; string image = result.headimgurl; wxResponseBaseMgr.Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), requestMessage.Content, "text", responseMessage.Content, requestMessage.ToUserName, pickname, image); //responseMessage.Content ="openid=" + requestMessage.FromUserName; responseMessage.Content = "不存在客服" + int.Parse(str_new) + "!"; return(responseMessage); } else { string kfcoont = ""; int number = 1; BLL.wx_userweixin bll = new BLL.wx_userweixin(); Model.wx_userweixin model = bll.GetModel(wid); number = int.Parse(model.extInt.ToString()); if (int.Parse(str_new) < 10) { kfcoont = "kf200" + (int.Parse(str_new) + number) + "@" + weixincode; } else { kfcoont = "kf20" + (int.Parse(str_new) + number) + "@" + weixincode; } if (Zaixian().Contains(kfcoont)) { var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageTransfer_Customer_Service>(requestMessage); string openid = requestMessage.FromUserName; string token = ConvertDateTimeInt(DateTime.Now).ToString(); var result = UserApi.Info(stoce(), openid); string pickname = result.nickname; string image = result.headimgurl; wxResponseBaseMgr.Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), requestMessage.Content, "Transfer_Customer_Service", responseMessage.MsgType.ToString(), requestMessage.ToUserName, pickname, image); CustomerServiceAccount ss = new CustomerServiceAccount(); ss.KfAccount = kfcoont; List <CustomerServiceAccount> listss = new List <CustomerServiceAccount>(); listss.Add(ss); responseMessage.TransInfo = listss; return(responseMessage); } else { var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageText>(requestMessage); string openid = requestMessage.FromUserName; string token = ConvertDateTimeInt(DateTime.Now).ToString(); responseMessage.Content = getDataTxtComm(wid, Indexid, openid, token); var result = UserApi.Info(stoce(), openid); string pickname = result.nickname; string image = result.headimgurl; wxResponseBaseMgr.Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), requestMessage.Content, "text", responseMessage.Content, requestMessage.ToUserName, pickname, image); responseMessage.Content = "客服" + str_new + "不在线,请稍后再试!"; return(responseMessage); } } } else if (str.Contains("小招")) { var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageText>(requestMessage); string openid = requestMessage.FromUserName; string token = ConvertDateTimeInt(DateTime.Now).ToString(); //responseMessage.Content = getDataTxtComm(wid, Indexid, openid, token); var result = UserApi.Info(stoce(), openid); string pickname = result.nickname; string image = result.headimgurl; wxResponseBaseMgr.Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), requestMessage.Content, "text", responseMessage.Content, requestMessage.ToUserName, pickname, image); wxResponseBaseMgr.updata_1(str, openid); responseMessage.Content = "消息已受到,请耐心等待!切勿输入其他文字"; return(responseMessage); } else { ///进入文字处理 var responseMessage = ResponseMessageBase.CreateFromRequestMessage <ResponseMessageText>(requestMessage); //<xml> // <ToUserName><![CDATA[oFo2Hjq6_yMhyz6cQ2MZtmxODOVU]]></ToUserName> // <FromUserName><![CDATA[gh_2cb6c9131eb6]]></FromUserName> // <CreateTime>1472450395</CreateTime> // <MsgType><![CDATA[text]]></MsgType> // <Content><![CDATA[hello]]></Content> //</xml> string openid = requestMessage.ToUserName; string openids = requestMessage.FromUserName; // string openid = requestMessage.ToUserName; string token = ConvertDateTimeInt(DateTime.Now).ToString(); responseMessage.Content = getDataTxtComm(wid, Indexid, openid, token); var result = UserApi.Info(stoce(), openids); string pickname = result.nickname; string image = result.headimgurl; wxResponseBaseMgr dd = new wxResponseBaseMgr(); string extstr3 = dd.ccc(openids); wxResponseBaseMgr.Add(wid, requestMessage.FromUserName, requestMessage.MsgType.ToString(), requestMessage.Content, "text", responseMessage.Content, requestMessage.ToUserName, pickname, image); wxResponseBaseMgr.updata(extstr3, openids); //responseMessage.Content ="openid=" + requestMessage.FromUserName; return(responseMessage); } }
/// <summary> /// 根据XML信息填充实实体 /// </summary> /// <typeparam name="T">MessageBase为基类的类型,Response和Request都可以</typeparam> /// <param name="entity">实体</param> /// <param name="doc">XML</param> public static void FillEntityWithXml <T>(this T entity, XDocument doc) where T : /*MessageBase*/ class, new() { if (doc == null) { throw new ArgumentNullException(nameof(doc)); } var root = doc.Root; if (doc.Root == null) { throw new ArgumentNullException(nameof(doc.Root)); } if (entity == null) { throw new ArgumentNullException(nameof(entity)); } //entity = entity ?? new T(); var props = entity.GetType().GetProperties(); foreach (var prop in props) { if (!prop.CanWrite) { continue;//如果不可读则跳过 } var propName = prop.Name; if (root.Element(propName) != null) { switch (prop.PropertyType.Name) { //case "String": // goto default; case "DateTime": case "DateTimeOffset": case "Int32": case "Int64": case "Double": case "Nullable`1": //可为空对象 EntityUtility.FillSystemType(entity, prop, root.Element(propName).Value); break; case "Boolean": if (propName == "FuncFlag") { EntityUtility.FillSystemType(entity, prop, root.Element(propName).Value == "1"); } else { goto default; } break; //以下为枚举类型 case "RequestMsgType": //已设为只读 //prop.SetValue(entity, MsgTypeHelper.GetRequestMsgType(root.Element(propName).Value), null); break; case "ResponseMsgType": //Response适用 //已设为只读 //prop.SetValue(entity, MsgTypeHelper.GetResponseMsgType(root.Element(propName).Value), null); break; case "Event": //已设为只读 //prop.SetValue(entity, EventHelper.GetEventType(root.Element(propName).Value), null); break; //以下为实体类型 case "List`1": //List<T>类型,ResponseMessageNews适用 { var genericArguments = prop.PropertyType.GetGenericArguments(); var genericArgumentTypeName = genericArguments[0].Name; if (genericArgumentTypeName == "Article") { //文章下属节点item List <Article> articles = new List <Article>(); foreach (var item in root.Element(propName).Elements("item")) { var article = new Article(); FillEntityWithXml(article, new XDocument(item)); articles.Add(article); } prop.SetValue(entity, articles, null); } else if (genericArgumentTypeName == "Account") { List <CustomerServiceAccount> accounts = new List <CustomerServiceAccount>(); foreach (var item in root.Elements(propName)) { var account = new CustomerServiceAccount(); FillEntityWithXml(account, new XDocument(item)); accounts.Add(account); } prop.SetValue(entity, accounts, null); } else if (genericArgumentTypeName == "PicItem") { List <PicItem> picItems = new List <PicItem>(); foreach (var item in root.Elements(propName).Elements("item")) { var picItem = new PicItem(); var picMd5Sum = item.Element("PicMd5Sum").Value; Md5Sum md5Sum = new Md5Sum() { PicMd5Sum = picMd5Sum }; picItem.item = md5Sum; picItems.Add(picItem); } prop.SetValue(entity, picItems, null); } else if (genericArgumentTypeName == "AroundBeacon") { List <AroundBeacon> aroundBeacons = new List <AroundBeacon>(); foreach (var item in root.Elements(propName).Elements("AroundBeacon")) { var aroundBeaconItem = new AroundBeacon(); FillEntityWithXml(aroundBeaconItem, new XDocument(item)); aroundBeacons.Add(aroundBeaconItem); } prop.SetValue(entity, aroundBeacons, null); } else if (genericArgumentTypeName == "CopyrightCheckResult_ResultList") //RequestMessageEvent_MassSendJobFinish { List <CopyrightCheckResult_ResultList> resultList = new List <CopyrightCheckResult_ResultList>(); foreach (var item in root.Elements("ResultList").Elements("item")) { CopyrightCheckResult_ResultList resultItem = new CopyrightCheckResult_ResultList(); FillEntityWithXml(resultItem.item, new XDocument(item)); resultList.Add(resultItem); } prop.SetValue(entity, resultList, null); } //企业微信 else if (genericArguments[0].Name == "MpNewsArticle") { List <MpNewsArticle> mpNewsArticles = new List <MpNewsArticle>(); foreach (var item in root.Elements(propName)) { var mpNewsArticle = new MpNewsArticle(); FillEntityWithXml(mpNewsArticle, new XDocument(item)); mpNewsArticles.Add(mpNewsArticle); } prop.SetValue(entity, mpNewsArticles, null); } break; } case "Music": //ResponseMessageMusic适用 FillClassValue <Music>(entity, root, propName, prop); break; case "Image": //ResponseMessageImage适用 FillClassValue <Image>(entity, root, propName, prop); break; case "Voice": //ResponseMessageVoice适用 FillClassValue <Voice>(entity, root, propName, prop); break; case "Video": //ResponseMessageVideo适用 FillClassValue <Video>(entity, root, propName, prop); break; case "ScanCodeInfo": //扫码事件中的ScanCodeInfo适用 FillClassValue <ScanCodeInfo>(entity, root, propName, prop); break; case "SendLocationInfo": //弹出地理位置选择器的事件推送中的SendLocationInfo适用 FillClassValue <SendLocationInfo>(entity, root, propName, prop); break; case "SendPicsInfo": //系统拍照发图中的SendPicsInfo适用 FillClassValue <SendPicsInfo>(entity, root, propName, prop); break; case "ChosenBeacon": //摇一摇事件通知 FillClassValue <ChosenBeacon>(entity, root, propName, prop); break; case "AroundBeacon": //摇一摇事件通知 FillClassValue <AroundBeacon>(entity, root, propName, prop); break; #region 开放平台-小程序 case "ThirdFasteRegisterInfo": //开放平台-小程序-快速注册 FillClassValue <ThirdFasteRegisterInfo>(entity, root, propName, prop); break; #endregion #region RequestMessageEvent_MassSendJobFinish case "CopyrightCheckResult": FillClassValue <CopyrightCheckResult>(entity, root, propName, prop); break; case "CopyrightCheckResult_ResultList_Item": FillClassValue <CopyrightCheckResult_ResultList_Item>(entity, root, "item", prop); break; #region 企业号 /* 暂时放在Work.dll中 * case "AgentType": * { * AgentType tp; #if NET35 * try * { * tp = (AgentType)Enum.Parse(typeof(AgentType), root.Element(propName).Value, true); * prop.SetValue(entity, tp, null); * } * catch * { * * } #else * if (Enum.TryParse(root.Element(propName).Value, out tp)) * { * prop.SetValue(entity, tp, null); * } #endif * break; * } * case "Receiver": * { * Receiver receiver = new Receiver(); * FillEntityWithXml(receiver, new XDocument(root.Element(propName))); * prop.SetValue(entity, receiver, null); * break; * } */ #endregion #endregion default: var enumSuccess = false; if (prop.PropertyType.IsEnum) { //未知的枚举类型 try { prop.SetValue(entity, Enum.Parse(prop.PropertyType, root.Element(propName).Value, true), null); enumSuccess = true; } catch { } } if (!enumSuccess) { prop.SetValue(entity, root.Element(propName).Value, null); } break; } } } }