- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 RestSharp 库使用 Web 服务。我对 Web 服务实现没有任何控制权,因为它是第三方(Taleo Business Edition)。
我的问题是存在一些包含无效字符的错误数据。很多数据都是从文档中复制/粘贴的,我不能强制用户返回并清理这些数据。坏字符是不可见的控制代码(0x01),这并没有帮助。
我能想到的唯一解决方案是在 RestSharp 尝试反序列化 XML 之前添加一个预处理步骤。我真的很想避免编写自己的 XML 反序列化器。
我考虑过扩展 XmlSerializer类,但似乎没有任何虚拟方法对于添加此预处理步骤有用。
我还尝试过使用 RestSharp 库中的 OnBeforeDeserializing 事件,但我不知道可以在那里做什么来预处理 XML。
我觉得我在这里错过了一些基本的东西,因为它似乎是使用 RESTful Web 服务的常见用例。
最佳答案
不幸的是使用OnBeforeDeserialization
不允许您预处理内容。 Content
都不是或RawBytes
当您在此处修改属性时,属性实际上会发生更改。这解释了为什么在尝试清理我的 XML 时,所有正则表达式解决方案似乎都没有任何效果。
为了修改内容,您必须使用自定义 XML 反序列化器。幸运的是,这比我想象的要容易,因为您可以扩展 RestSharp.Deserializers.XmlDeserializer
并覆盖 Deserialize<T>
方法。然后您可以修改response.Content
在将其传递给基本函数之前。
我最终使用的解决方案:
class CustomXmlDeserializer : RestSharp.Deserializers.XmlDeserializer {
public override T Deserialize<T>(IRestResponse response) {
//string pattern = @"&#x((10?|[2-F])FFF[EF]|FDD[0-9A-F]|7F|8[0-46-9A-F]9[0-9A-F])"; // XML 1.0
string pattern = @"#x((10?|[2-F])FFF[EF]|FDD[0-9A-F]|[19][0-9A-F]|7F|8[0-46-9A-F]|0?[1-8BCEF])"; // XML 1.1
System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(pattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase);
if (regex.IsMatch(response.Content)) {
response.Content = regex.Replace(response.Content, String.Empty);
}
response.Content = response.Content.Replace("&;", string.Empty);
return base.Deserialize<T>(response);
}
}
基于这个答案:https://stackoverflow.com/a/8331749/201021
我的主要问题是文档中存在大量无效的 xml 实体。我从未见过任何实际无效的控制代码字符。但我有很多像 �
这样的东西和
诸如此类的事情。这意味着我无法使用仅转义特定字符值的解决方案。
当我尝试在 OnBeforeDeserialize
中使用上面的正则表达式时它似乎根本不起作用。问题实际上不在于正则表达式,而在于您无法修改 Content
那里有属性(property)。
此解决方案对其他人来说可能过于本地化,但您应该能够修改此处的预处理代码以获得您需要的结果。
关于c# - 通过在反序列化之前添加预处理步骤,使用 RestSharp 处理 XML 中的无效字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32469961/
我正在使用 RestSharp 访问 RubyOnRails API。您可能知道,RoR 喜欢参数名称采用 model_name[property] 形式。另一方面,RestSharp 不喜欢它。 F
我刚刚下载了 DropNet 来尝试使用它。我在尝试执行 new DropNetClient 时遇到异常: Method not found: System.String RestSharp.Rest
当我尝试使用 nuget 将 RestSharp 添加到可移植类库项目时,我得到以下信息: Could not install package 'RestSharp 104.1'. You are t
我有以下代码片段,它一直在我身上失败: ServicePointManager.ServerCertificateValidationCallback += (o, c, ch, er) => tru
当我像这样在 RestSharp 中发出请求时: var response = client.Execute(request); 我收到以下错误: "Unable to cast object of
有什么方法可以从 RestSharp RestRequest 中删除 header 吗? 我在项目页面中偶然发现了这个问题,但看不到它曾经被应用过: https://github.com/restsh
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我正在使用 RestSharp 将信息发送到 API。我想记录发送到此 API 的 XML,以便稍后进行调试。 我想做这样的事情: var request = new RestRequest(reso
下面是使用标准 HttpWebRequest 和 HttpWebResponse 完成的 POST 请求。基本上它发布带有一些参数的二进制文件。 我怎样才能用 RestSharp 做同样的事情? 来源
目前无法解决问题:无法将类型为“RestSharp.JsonArray”的对象转换为类型为“System.Collections.Generic.IDictionary”2[System.String
我使用了在 ASP.NET Framework version 4.5.1 上运行的 MVC Web 应用程序. 我做了 nopcommercePlugin .我正在将版本 3.4 升级到 3.5 更
我用过restsharp对于我的一些 .net 项目。我发现它对于从网络服务获取 Json 数据并将它们转换为 .net 对象非常有用。我需要一个类似的java框架。我想用它来为我的 android
最近我在用 RestSharp消耗我的 Restful 资源。并期望在服务器和客户端之间与 JSon 交换数据。下面是我的 C# 代码。 var client = new RestSharp.Rest
我的应用程序要求是使用签名程序集。我使用 Visual Studio 2012 命令工具签署了 RestSharp 程序集。应用程序构建成功,但运行时出现以下错误: Could not load fi
在特定情况下,我需要能够在请求/响应中禁用压缩。 使用 Firefox RestClient 我能够将一些 xml 发布到 Web 服务并使用单个 header 参数“Accept-Encoding”
我正在尝试使用 RestSharp(我的第一次)。我正在使用他们的示例: var client = new RestClient( "http://example.com" ); var reques
我查看了有关此问题的其他问题,但似乎没有任何内容可以回答我的问题。希望因为我的问题/问题似乎是一个简单的解决方案。 我使用 nuget 安装了 RestSharp。 using RestSharp;
我正在尝试使用 RestSharp 编码示例来连接到 MailGun。在下面的代码中,请参阅: client.Authenticator = new HttpBasicAuthenticator("X
我正在使用 RestSharp。我使用 XML 作为我的数据的传输编码,但后来我 had problems有了这个,所以我转而使用 JSON。现在我也遇到了问题! 在我尝试传递一个包含字节数组 (*)
我刚刚更新了在 ASP.NET Framework 4.5.2 版上运行的 MVC Web 应用程序。我正在使用 Twilio 发送 SMS 消息: var twilio = new TwilioRe
我是一名优秀的程序员,十分优秀!