public void LocationMessageReceivedEventArgs() { string s = @"<xml> <ToUserName><![CDATA[gh_712b448adf85]]></ToUserName> <FromUserName><![CDATA[oI3UkuL9uZxTOuj--HHMSMTlO3ks]]></FromUserName> <CreateTime>1490872329</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Location_X>23.134521</Location_X> <Location_Y>113.358803</Location_Y> <Scale>20</Scale> <Label><![CDATA[位置信息]]></Label> <MsgId>6403247895999455936</MsgId> </xml>"; var result = XmlConvert.DeserializeObject <LocationMessageReceivedEventArgs>(s); Assert.Equal("gh_712b448adf85", result.ToUserName); Assert.Equal("oI3UkuL9uZxTOuj--HHMSMTlO3ks", result.FromUserName); Assert.Equal(1490872329, WeixinTimestampHelper.FromLocalTime(result.CreateTime)); Assert.Equal(ReceivedMsgType.text, result.MsgType); Assert.Equal((decimal)23.134521, result.Latitude); Assert.Equal((decimal)113.358803, result.Longitude); Assert.Equal(20, result.Scale); Assert.Equal("位置信息", result.Label); Assert.Equal(6403247895999455936, result.MsgId); }
public async IAsyncEnumerable <(int Id, string Name)> FindCharacter(string characterName) { if (!CharacterCache.TryGetValue(characterName, out var id)) { Log.Debug($@"Searching for character {characterName}..."); using var charResponse = await HttpClient.GetAsync($@"api.php?function=search&in=charname&for={characterName}"); await using var charInfoStream = await charResponse.Content.ReadAsStreamAsync(); var charInfo = XmlConvert.DeserializeObject <SearchResponse <Member> >(charInfoStream); if (charInfo.Relevant != null) { Log.Debug($@"{charInfo.Relevant.Results.Count} relevant matches found for {characterName}"); foreach (var entry in charInfo.Relevant.Results) { yield return(entry.Id, entry.Name); } } else if (charInfo.Direct != null) { Log.Debug($@"Direct match found for {characterName}"); CharacterCache[charInfo.Direct.Result.Name] = charInfo.Direct.Result.Id; yield return(charInfo.Direct.Result.Id, charInfo.Direct.Result.Name); } else { Log.Warn($@"No character matches found for {characterName}"); } } else { yield return(id, characterName); } }
public void TestDeserializeObject_Setting_Namespaces_Indented_OmitXmlDeclaration() { string xml = EmbeddedResourceLoader.LoadAsString( @"Sangmado.Inka.Serialization.UnitTests.TestXml.Employee-DennisGao-Indented-OmitXmlDeclaration.xml"); var expected = XmlConvert.DeserializeObject <Employee>(xml); var actual = new Employee() { Company = new Company() { Id = 123, Name = "Sangmado", }, Person = new Person() { Id = 11111, FullName = "Dennis Gao", FirstName = "Dennis", LastName = "Gao", }, }; Assert.IsNotNull(expected); Assert.IsNotNull(expected.Company); Assert.IsNotNull(expected.Person); Assert.AreEqual(expected.Company.Name, actual.Company.Name); Assert.AreEqual(expected.Person.FullName, actual.Person.FullName); }
private static Guid?GetErrorLogSection() { try { var baseDirectory = AppDomain.CurrentDomain.BaseDirectory; string pathToConfigFile = Path.Combine(baseDirectory, "web.config"); var configMap = new ExeConfigurationFileMap { ExeConfigFilename = pathToConfigFile }; var config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None); var elmahSection = config.GetSection("elmah/errorLog"); var xml = elmahSection.SectionInformation.GetRawXml(); var obj = XmlConvert.DeserializeObject <ErrorLogXml>(xml); if (string.IsNullOrEmpty(obj?.LogId)) { return(null); } return(new Guid(obj.LogId)); } catch (Exception ex) { return(null); } }
/// <summary> /// Se obtiene la información de la /// </summary> /// <returns></returns> public async Task <T> Get() { try { //Se hace un Get resquest, génerico y asíncrono. var response = await httpclient.GetAsync(new Uri(url)); if (response.IsSuccessStatusCode) { //se lee el contenido de la respuesta. string content = await response.Content.ReadAsStringAsync(); //se obtiene un modelo del tipo T del contenido de la respuesta. var desObject = XmlConvert.DeserializeObject <T>(content); return(desObject); } } catch (Exception ex) { throw new Exception(ex.Message); } return(null);; }
public void MustSerializable_ResponseTextMessage() { string excepted = @"<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1490872329</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[你好]]></Content> </xml>"; var o = new ResponseMessageText { ToUserName = "******", FromUserName = "******", CreateTime = WeixinTimestampHelper.ToLocalTime(1490872329), Content = "你好" }; var result = XmlConvert.SerializeObject(o); var deserializedExcepted = XmlConvert.DeserializeObject <ResponseMessageText>(excepted); var reserializedExcepted = XmlConvert.SerializeObject(deserializedExcepted); Assert.Equal(reserializedExcepted, result); }
public static void DeserializeObject_Invalid() { Assert.Throws <ArgumentNullException>("type", () => XmlConvert.DeserializeObject(null, "<xml></xml>")); //Type is null Assert.Throws <ArgumentNullException>("xml", () => XmlConvert.DeserializeObject(typeof(string), null)); //Xml is null Assert.Throws <XmlException>(() => XmlConvert.DeserializeObject(typeof(string), "hello")); //Xml is invalid }
public static void Deserialize_InvalidDictionaryXml_IgnoresInvalid() { string xml = @" <CollectionObject> <DictionaryValue> <Element> <Key>a</Key> <Value>1</Value> </Element> <Element> <Key>b</Key> </Element> <Element> <Value>3</Value> </Element> <Element> </Element> <Element> <Key>e</Key> <Value>5</Value> </Element> </DictionaryValue> </CollectionObject>"; CollectionObject co = XmlConvert.DeserializeObject <CollectionObject>(xml); Assert.Equal(2, co.DictionaryValue.Count); }
public static void Deserialize_NoXmlElement_NullProperty() { string xml = @"<BasicObject></BasicObject>"; BasicObject co = XmlConvert.DeserializeObject <BasicObject>(xml); Assert.Null(co.StringValue); }
public static void Refresh() { if (!File.Exists(SettingsPath)) { File.WriteAllText(SettingsPath, XmlConvert.Serialize(new T())); } _instance = XmlConvert.DeserializeObject <T>(File.ReadAllText(SettingsPath)); }
public static async Task <T> ReadXml <T>(string fileName) where T : new() { if (!File.Exists(fileName)) { throw new FileNotFoundException(fileName); } var result = await Read(fileName); return(XmlConvert.DeserializeObject <T>(result.toString(), XmlConvertOptions.ExcludeTypes)); }
private async Task ROSASTradeAsync(SoapDocument soapDocument) { string message = string.Empty; string xmlStr = soapDocument.Args.FirstOrDefault(o => o.LocalName == "serviceParas")?.Value; try { var xmlServiceParas = XmlConvert.DeserializeObject <HebeiESBServiceParas>(xmlStr); if (xmlServiceParas == null || xmlServiceParas.ProvinceData.Count() == 0) { throw new Exception("解析serviceParas失败"); } bool isSuccess = true; var ftpConfig = AppSettings.FtpSection.FirstOrDefault(o => o.Provider == "HebeiESB"); foreach (var p in xmlServiceParas.ProvinceData) { if (string.IsNullOrWhiteSpace(p.Path)) { continue; } var success = await FtpUtil.Download(new FtpConfig { Host = p.Ip, UserName = p.User, Password = p.Password, Port = 21, RemotePath = p.Path, BaseDirectory = ftpConfig.BaseDirectory, LocalDirectory = ftpConfig.LocalDirectory, RenameFormat = ftpConfig.RenameFormat, CategoryMaps = ftpConfig.CategoryMaps }); isSuccess &= success; string successString = success ? "成功" : "失败"; message += string.Format($"下载{successString}:ftp://{p.User}:{p.Password}@{p.Ip}{p.Path}", p, successString); } if (!isSuccess) { await ErrorRequestAsync(null, message); } else { await SuccessRequestAsync(null, message : message); } } catch (Exception ex) { Logger.Error($"[HBESBService]ROSASTrade异常:--{ex.Message}", ex); await ErrorRequestAsync(null, ex.Message); } }
/// <summary> /// 加载本地游戏配置。 /// </summary> public void Load() { var asset = Resources.Load("Config/" + mConfigFileName) as TextAsset; if (asset == null) { Debug.LogWarning("gameconfig not exist."); return; } GameConfig = XmlConvert.DeserializeObject <GameConfig>(asset.text); }
public static void Deserialize_EmptyCollectionXml_CreatesEmptyCollection() { string xml = @" <CollectionObject> <CollectionValue> </CollectionValue> </CollectionObject>"; CollectionObject co = XmlConvert.DeserializeObject <CollectionObject>(xml); Assert.Equal(0, co.CollectionValue.Count); }
public void MustSerializable_ResponseNewsMessage() { string excepted = @"<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1490872329</CreateTime> <MsgType><![CDATA[news]]></MsgType> <ArticleCount>2</ArticleCount> <Articles> <item> <Title><![CDATA[title1]]></Title> <Description><![CDATA[description1]]></Description> <PicUrl><![CDATA[picurl]]></PicUrl> <Url><![CDATA[url]]></Url> </item> <item> <Title><![CDATA[title]]></Title> <Description><![CDATA[description]]></Description> <PicUrl><![CDATA[picurl]]></PicUrl> <Url><![CDATA[url]]></Url> </item> </Articles> </xml>"; var o = new ResponseMessageNews { ToUserName = "******", FromUserName = "******", CreateTime = WeixinTimestampHelper.ToLocalTime(1490872329), }; o.Articles.Add(new Article { Title = "title1", Description = "description1", PicUrl = "picurl", Url = "url" }); o.Articles.Add(new Article { Title = "title", Description = "description", PicUrl = "picurl", Url = "url" }); var result = XmlConvert.SerializeObject(o); var deserializedExcepted = XmlConvert.DeserializeObject <ResponseMessageNews>(excepted); var reserializedExcepted = XmlConvert.SerializeObject(deserializedExcepted); Assert.Equal(reserializedExcepted, result); }
public async Task <T> SendRequest <T>(ApiMethodEnum apiMethod, ApiSerializerEnum serializer, string url, Dictionary <string, string> headers = null, object body = null) where T : class { var httpWebRequest = (HttpWebRequest)WebRequest.Create(url); httpWebRequest.ContentType = "application/json"; httpWebRequest.Method = apiMethod.ToString(); httpWebRequest.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; if (headers != null) { foreach (var(key, value) in headers) { httpWebRequest.Headers.Add(key, value); } } if (body != null) { await using var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()); var json = JsonConvert.SerializeObject(body, Formatting.None); streamWriter.Write(json); streamWriter.Flush(); streamWriter.Close(); } using var response = (HttpWebResponse) await httpWebRequest.GetResponseAsync(); await using var stream = response.GetResponseStream(); using var reader = new StreamReader(stream ?? throw new InvalidOperationException()); var apiResult = await reader.ReadToEndAsync(); if (string.IsNullOrEmpty(apiResult)) { return(null); } switch (serializer) { case ApiSerializerEnum.None: return((T)Convert.ChangeType(apiResult, typeof(T))); case ApiSerializerEnum.Json: return(JsonConvert.DeserializeObject <T>(apiResult)); case ApiSerializerEnum.XML: return(XmlConvert.DeserializeObject <T>(apiResult)); default: throw new ArgumentOutOfRangeException(); } }
public async Task <IPingResponse> PlacementCheckAsync(IPingRequest request) { var urlString = $"{AffiliateServiceEndpoint}/Ping?{request.ToQuerystring()}"; var xmlString = await new HttpClient().GetStringAsync(new Uri(urlString)).ConfigureAwait(false); var pingResponse = XmlConvert.DeserializeObject <PingResponse>(StripNamespacesFromPingResponseRoot(xmlString)); if (!pingResponse.IsSuccess) { ErrorSignal.FromCurrentContext().Raise(new Exception($"AffiliateProxyService:PlacementCheckAsync - {pingResponse.RejectedReason} | {request.ToQuerystring()}")); } return(pingResponse); }
public void ControllerXmlAPI() { TestController.TestSub sub = new TestController.TestSub() { IntProperty = 123, StringProperty = SimpleControllerData }; string raw = client.UploadString($"{Address}/controller/TestPostXML", XmlConvert.SerializeObject(sub)); var data = XmlConvert.DeserializeObject <APIWrap>(raw).As <TestSub>(); Assert.AreEqual(SimpleControllerData, data.Result.StringProperty, $"Received data incorrect, Exception: {data.Exception?.Message}"); }
public async Task <IPostResponse> SubmitLeadAsync(IPostRequest request) { var urlString = $"{SemServiceEndpoint}/Post?{request.ToQuerystring()}"; var xmlString = await new HttpClient().GetStringAsync(new Uri(urlString)).ConfigureAwait(false); var postResponse = XmlConvert.DeserializeObject <PostResponse>(StripNamespacesFromPostResponseRoot(xmlString)); if (!postResponse.IsSuccess) { ErrorSignal.FromCurrentContext().Raise(new Exception($"SEMProxyService:SubmitLeadAsync - {postResponse.RejectedReason} | {request.ToQuerystring()}")); } return(postResponse); }
/// <summary> /// 获取城市天气详情信息 /// </summary> /// <param name="cityId">天气城市代号</param> /// <returns>城市天气详情信息</returns> public CityWeather GetCityWeather(string cityId) { string getUrl = string.Format("http://wthrcdn.etouch.cn/WeatherApi?citykey={0}", cityId); string weatherXml = SimulateRequest.HttpClientGet(getUrl, true); if (string.IsNullOrWhiteSpace(weatherXml)) { throw new WeatherException(-200, "请求到的天气数据Xml为空!"); } CityWeather cityWeather = XmlConvert.DeserializeObject <CityWeather>(weatherXml); return(cityWeather); }
/// <summary> /// Deserializes the specified <paramref name="value" /> into an object of <paramref name="valueType"/>. /// </summary> /// <param name="value">The stream from which to deserialize the object graph.</param> /// <param name="valueType">The type of the deserialized object.</param> /// <returns>An object of <paramref name="valueType"/>.</returns> /// <remarks>This method will deserialize, in the order specified, using one of either:<br /> /// 1. the explicitly defined <see cref="XmlFormatterOptions.ReaderFormatter" /> delegate<br /> /// 2. the implicit or explicit defined delegate in <see cref="XmlFormatterOptions.ReaderFormatters" /> dictionary<br /> /// 3. if neither was specified, a default XML reader implementation will be used.</remarks> public override object Deserialize(Stream value, Type valueType) { var serializer = Options.Converter; if (serializer == null) { var formatter = Options.ParseReaderFormatter(valueType); serializer = DynamicXmlConverter.Create(null, formatter, options => { options.ReaderSettings = Options.ReaderSettings; options.RootName = Options.RootName; }); } return(XmlConvert.DeserializeObject(value, valueType, serializer)); }
public void ReceivedEventArgs_Compatible() { IServiceCollection services = new ServiceCollection(); services.Configure((Action <WeixinWelcomePageOptions>)(options => { options.AppId = "wxaf5aa2d87ff3b700"; options.WebsiteToken = "MdPhLRFuJ9X48WWQDHJA3nxIK"; options.EncodingAESKey = "5o7tcB4nbWtcX76QyF1fi90FBt4ZxFD8N6oND0tHVa4"; })); services.AddLogging(); services.AddScoped <IWeixinMessageEncryptor, WeixinMessageEncryptor>(); var sp = services.BuildServiceProvider(); var _encryptor = sp.GetRequiredService <IWeixinMessageEncryptor>(); var _loggerFactory = sp.GetRequiredService <ILoggerFactory>(); var _logger = _loggerFactory.CreateLogger("test"); var xml = @" <xml> <ToUserName><![CDATA[gh_08dc1481d8cc]]></ToUserName> <FromUserName><![CDATA[oEylh5ksJ9m44qL7nXvHu0npUTww]]></FromUserName> <CreateTime>1553425488</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[好]]></Content> <MsgId>22239703566971011</MsgId> <Encrypt><![CDATA[jF3WhwHgtyZ95HvHcWqaRLlbr0OkTNPY4ngqrbyZqyhoMWt1PnTnyXruXTdDxOlzVHdS3e1SPzneMNVInqPRWT9DkQuPuud3rJHv9VQc4efnQdGhtVXP5h2XXXqEVcDKTlaJj5fqcECF+KURkfAM+zlZI3PdqgsAq1v1sHsm2FeM8SeQ4IVlzJvPIiLVyjSxXJB4e0Wzy3VRqS5L4FWHzyEcEs90D0YmeIdHEsUjzcvEhX46MiAJyyzf8lq6GnuxxFFuAieUNLgVV7Y+LjhFY2ylNw8qI3/f/dL3hkm8Qr+IwYOvofqPVMVTgGcrTDTexvpRg8+gALeMGNYsDtjUpYKHeT02hZwFSRM/Bz4aXJ3AFiuL8pbC6u0WbFkfz0D+IIHRqKwnsqwFs97KlemI5Aa+8avcOWyuuqkxzE8L8Ic=]]></Encrypt> </xml>"; // HTTP/1.0 POST http://wx.steamlet.com/wx?signature=77b27c5651d7ec874f87d9ec7f953b922810f476×tamp=1553425488&nonce=580423986&openid=oEylh5ksJ9m44qL7nXvHu0npUTww&encrypt_type=aes&msg_signature=a76bb4d3348628369b38e8fecebf5f0545d48786 text/xml 764 var timestamp = "1553425488"; var nonce = "580423986"; var msg_signature = "a76bb4d3348628369b38e8fecebf5f0545d48786"; var encrypt_type = "aes"; var received = XmlConvert.DeserializeObject <ReceivedEventArgs>(xml); if (encrypt_type == "aes") { var decryptedXml = _encryptor.Decrypt(msg_signature, timestamp, nonce, xml); Debug.WriteLine("Request Body[Decrypted]({0}): {1}", decryptedXml?.Length, decryptedXml); xml = decryptedXml; } var result = XmlConvert.DeserializeObject <ReceivedEventArgs>(xml); Assert.Equal("gh_08dc1481d8cc", result.ToUserName); Assert.Equal(ReceivedMsgType.text, result.MsgType); }
public async Task PrefetchCharacterIds() { Log.Debug("Prefetching character ids..."); using var response = await HttpClient.GetAsync(@"api.php?function=points"); await using var responseStream = await response.Content.ReadAsStreamAsync(); var info = XmlConvert.DeserializeObject <Response>(responseStream); foreach (var character in info.Players.Player) { CharacterCache[character.Name] = character.Id; } Log.Debug("Prefetch complete."); }
public LocalXmlFileActorConfiguration(string localXmlFilePath) { if (string.IsNullOrEmpty(localXmlFilePath)) { throw new ArgumentNullException("localXmlFilePath"); } if (!File.Exists(localXmlFilePath)) { throw new FileNotFoundException("Cannot find the xml actor configuration file.", localXmlFilePath); } _localXmlFilePath = localXmlFilePath; var fileContent = File.ReadAllText(_localXmlFilePath); _configuration = XmlConvert.DeserializeObject <XmlActorConfiguration>(fileContent); }
public void SubscribeEventReceivedEventArgs() { string s = @"<xml><ToUserName><![CDATA[gh_712b448adf85]]></ToUserName> <FromUserName><![CDATA[oI3UkuL9uZxTOuj--HHMSMTlO3ks]]></FromUserName> <CreateTime>1490872329</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[subscribe]]></Event> </xml>"; var result = XmlConvert.DeserializeObject <SubscribeEventReceivedEventArgs>(s); Assert.Equal("gh_712b448adf85", result.ToUserName); Assert.Equal("oI3UkuL9uZxTOuj--HHMSMTlO3ks", result.FromUserName); Assert.Equal(1490872329, WeixinTimestampHelper.FromLocalTime(result.CreateTime)); Assert.Equal(ReceivedMsgType.@event, result.MsgType); Assert.Equal(ReceivedEventType.subscribe, result.Event); }
public void ReceivedEventArgs() { string s = @"<xml> <ToUserName><![CDATA[gh_712b448adf85]]></ToUserName> <FromUserName><![CDATA[oI3UkuL9uZxTOuj--HHMSMTlO3ks]]></FromUserName> <CreateTime>1490872329</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[中文字符]]></Content> <MsgId>6403247895999455936</MsgId> </xml>"; var result = XmlConvert.DeserializeObject <ReceivedEventArgs>(s); Assert.Equal("gh_712b448adf85", result.ToUserName); Assert.Equal("oI3UkuL9uZxTOuj--HHMSMTlO3ks", result.FromUserName); Assert.Equal(1490872329, WeixinTimestampHelper.FromLocalTime(result.CreateTime)); Assert.Equal(ReceivedMsgType.text, result.MsgType); }
public T DecodeMessage <T>(byte[] data, int dataOffset, int dataLength) { if (data == null) { throw new CannotDeserializeMessageException("The data which is to be deserialized cannot be null."); } if (CompressionEnabled) { string xml = Encoding.UTF8.GetString(GZipCompression.Decompress(data, dataOffset, dataLength)); return(XmlConvert.DeserializeObject <T>(xml)); } else { string xml = Encoding.UTF8.GetString(data, dataOffset, dataLength); return(XmlConvert.DeserializeObject <T>(xml)); } }
public static void SerializeDeserializeObject_Equal_Success <T>(T obj1, XmlConvertOptions options) where T : new() { T obj2 = default(T); T obj3 = default(T); string xml = null; // Serializing and deserializing strings if (options == XmlConvertOptions.None) { xml = XmlConvert.SerializeObject(obj1); obj2 = XmlConvert.DeserializeObject <T>(xml); obj3 = (T)XmlConvert.DeserializeObject(obj1.GetType(), xml); } else { xml = XmlConvert.SerializeObject(obj1, options); obj2 = XmlConvert.DeserializeObject <T>(xml, options); obj3 = (T)XmlConvert.DeserializeObject(obj1.GetType(), xml, options); } Assert.Equal(obj1, obj2); Assert.Equal(obj1, obj3); // Serializing and deserializing XElements XElement element = null; if (options == XmlConvertOptions.None) { element = XmlConvert.SerializeXElement(obj1); obj2 = XmlConvert.DeserializeXElement <T>(element); obj3 = (T)XmlConvert.DeserializeXElement(obj1.GetType(), element); } else { element = XmlConvert.SerializeXElement(obj1, options); obj2 = XmlConvert.DeserializeXElement <T>(element, options); obj3 = (T)XmlConvert.DeserializeXElement(obj1.GetType(), element, options); } Assert.Equal(obj1, obj2); Assert.Equal(obj1, obj3); }
public void ReceivedEventArgs_aes() { IServiceCollection services = new ServiceCollection(); services.Configure((Action <WeixinWelcomePageOptions>)(options => { options.AppId = "wxaf5aa2d87ff3b700"; options.WebsiteToken = "MdPhLRFuJ9X48WWQDHJA3nxIK"; options.EncodingAESKey = "5o7tcB4nbWtcX76QyF1fi90FBt4ZxFD8N6oND0tHVa4"; })); services.AddLogging(); services.AddScoped <IWeixinMessageEncryptor, WeixinMessageEncryptor>(); var sp = services.BuildServiceProvider(); var _encryptor = sp.GetRequiredService <IWeixinMessageEncryptor>(); var _loggerFactory = sp.GetRequiredService <ILoggerFactory>(); var _logger = _loggerFactory.CreateLogger("test"); var xml = @"<xml> <ToUserName><![CDATA[gh_08dc1481d8cc]]></ToUserName> <Encrypt><![CDATA[+4+tcgOSZlVj8aW3DpoKQzIuZm9UxFT8f5O1bqX7SIF5FxhMlqSaWZ8Gqq1pIK4Web0nQQ8VxMM12DqDB8M77GdcvjAHfJbO6qkXFpb9z+8bSik8G1QQUzYMyWrZby1DAH+cZov6sMnJzdCWYRJ/TL4pxuDFlfxIRomIZxvq74CEyJ5TnuJ3LGor1n9ZJ3LJU7Av7zJrcdHBYdG12uz2dHddqBNiaeOrnNLCNHmrbJDSwz0p2QlBtthtH0WXG1QwPLBFoDFLAjVwFMFUh3+B2Nk8RT1rgFQ7CIItRr6vWCUwh9rifBJFA4b0Js24Y5Sd0/ZIPUzwZeeCpxL6iTsLHgEcm7DxKU2v/IVYt6ABR4kyk7myHbMIlY5gCbk7JBlGjW1fCXlOF0cOTxh1/Ar7Ombx/zBhOG5+O4gPGFZGMAI=]]></Encrypt> </xml>"; // http://wx.steamlet.com/wx?signature=51631d92ac7c9e7abb663ec2d5d7399e175ecc0d×tamp=1553419390&nonce=1180353179&openid=oEylh5ksJ9m44qL7nXvHu0npUTww&encrypt_type=aes&msg_signature=6b09992cbda171f56d43698acbee5c8667056e18 var timestamp = "1553419390"; var nonce = "1180353179"; var msg_signature = "6b09992cbda171f56d43698acbee5c8667056e18"; var encrypt_type = "aes"; if (encrypt_type == "aes") { var decryptedXml = _encryptor.Decrypt(msg_signature, timestamp, nonce, xml); _logger.LogDebug("Request Body[Decrypted]({0}): {1}", decryptedXml?.Length, decryptedXml); xml = decryptedXml; } var result = XmlConvert.DeserializeObject <ReceivedEventArgs>(xml); Assert.Equal("gh_08dc1481d8cc", result.ToUserName); Assert.Equal(ReceivedMsgType.text, result.MsgType); }
public void ImageMessageReceivedEventArgs() { string s = @"<xml> <ToUserName><![CDATA[gh_712b448adf85]]></ToUserName> <FromUserName><![CDATA[oI3UkuL9uZxTOuj--HHMSMTlO3ks]]></FromUserName> <CreateTime>1490872329</CreateTime> <MsgType><![CDATA[text]]></MsgType> <PicUrl><![CDATA[this is a url]]></PicUrl> <MediaId><![CDATA[media_id]]></MediaId> <MsgId>6403247895999455936</MsgId> </xml>"; var result = XmlConvert.DeserializeObject <ImageMessageReceivedEventArgs>(s); Assert.Equal("gh_712b448adf85", result.ToUserName); Assert.Equal("oI3UkuL9uZxTOuj--HHMSMTlO3ks", result.FromUserName); Assert.Equal(1490872329, WeixinTimestampHelper.FromLocalTime(result.CreateTime)); Assert.Equal(ReceivedMsgType.text, result.MsgType); Assert.Equal("this is a url", result.PicUrl); Assert.Equal("media_id", result.MediaId); Assert.Equal(6403247895999455936, result.MsgId); }