- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
编辑:在我问这个问题的那一刻,我想到了尝试一些事情..我已经根据请求设置了 XmlNamespace 属性,这就成功了..
request.XmlNamespace = "http://musicbrainz.org/ns/mmd-2.0#";
但是我真的不明白为什么...
下一个问题是让 RestSharp 将 xml 属性识别为对象属性
周末的大部分时间我都在研究这个问题,但我就是没有让它发挥作用。
我正在尝试围绕 RestFul 网络服务 (MusicBrainz) 编写包装器。我正在用一个简单的示例进行测试:获取一位艺术家的详细信息并将其放入自定义艺术家对象中。
当我在 RestClient 上执行 Execute 时它结束正常但我的对象属性为 null..但是当我使用 XmlDeserializer 测试反序列化时,对象属性被填充(但不是针对与属性对应的属性,但我稍后会解决)
在反序列化响应和将对象放入 response.data 之间会发生什么?这很可能是我犯的“新手”错误,因为这是我使用 RestSharp 的第一步。
帮助将不胜感激..
返回的 xml:
<metadata>
<artist type="Group" id="f1548c5b-329e-4036-921c-02213a04b525">
<name>Uriah Heep</name>
<sort-name>Uriah Heep</sort-name>
<country>GB</country>
<life-span>
<begin>1970</begin>
</life-span>
</artist>
</metadata>
我的类(class):
public class Artist
{
public int Id { get; set; }
public string Type { get; set; }
public string Name { get; set; }
public string SortName { get; set; }
public string Country { get; set; }
}
在下面的代码中填充了输出属性
var output = xml.Deserialize<Artist>(response);
但是调用时同样的响应不会填充属性
var response = client.Execute<T>(request);
完整代码(为了简单起见,我将测试代码放在泛型方法中):
public T Execute<T>(RestRequest request) where T : new()
{
var client = new RestClient();
client.BaseUrl = BaseUrl;
client.Authenticator = null;
//does not fill properties
var response = client.Execute<T>(request);
if (response.ErrorException != null)
{
throw response.ErrorException;
}
var xml = new XmlDeserializer();
//fills properties
var output = xml.Deserialize<Artist>(response);
return response.Data;
}
最佳答案
发生这种情况是因为 Execute
方法在收到响应后尝试根据请求的 RootElement 和 XmlNamespace 属性协商并将它们复制到XmlDeserializer
。
这是一个代码 from RestClient :
handler.RootElement = request.RootElement;
handler.DateFormat = request.DateFormat;
handler.Namespace = request.XmlNamespace;
response.Data = handler.Deserialize<T>(raw);
如果您传递一个 XmlNamespace 不匹配的 RestRequest,RestSharp 的 XmlDeserializer
(在幕后使用 XDocument)将无法将响应 XML 映射到对象属性,您将获得默认/空值值代替。
现在对于默认实现(当您手动创建 XmlDeserializer
时),如果您不设置 XmlNamespace,反序列化器将执行自动检测,基本上忽略所有命名空间在响应中并仅按名称映射所有属性。
查看源代码from XmlDeserializer :
// autodetect xml namespace
if (!Namespace.HasValue())
{
RemoveNamespace(doc);
}
考虑到以上所有内容,很清楚为什么在您使用此行将 XmlNamespace 属性显式设置为请求对象中的匹配命名空间后它开始工作:
request.XmlNamespace = "http://musicbrainz.org/ns/mmd-2.0#";
Execute
方法将命名空间复制到反序列化器中,并将 XML 适本地映射到对象。
关于c# - RestSharp Deserialize 返回空属性,但 xml.deserialize 测试有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13561373/
我正在使用 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
我是一名优秀的程序员,十分优秀!