【发布时间】:2012-11-13 17:23:30
【问题描述】:
编辑:当我问这个问题时,我想尝试一些东西.. 我已经在请求上设置了 XmlNamespace 属性,并且成功了..
request.XmlNamespace = "http://musicbrainz.org/ns/mmd-2.0#";
但我真的不明白为什么......
下一个问题是让 RestSharp 将 xml 属性识别为对象属性
这个周末的大部分时间我都在处理这个问题,但我就是没搞定。
我正在尝试为 RestFul 网络服务 (MusicBrainz) 编写一个包装器。我正在使用一个简单的示例进行测试:获取一位艺术家的详细信息并将其放入自定义 Artist 对象中。
当我在 RestClient 上执行 Execute 时,它结束了,但我的对象属性为空.. 但是当我使用 XmlDeserializer 测试反序列化时,objectproperties 被填充(但不适用于与属性对应的属性,但我稍后会解决)
在响应的反序列化和将对象放入 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>
我的班级:
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;
}
【问题讨论】:
-
你找到了我感兴趣的解决方案 :-)
-
@AndersBornholm。我已经很久没有在这个项目上做一些工作了。但就我的记忆而言,“解决方案”是在 RestSharp 请求上设置一个命名空间。如果你真的很绝望,我可以挖掘这个项目并仔细看看......
-
其实我也很久没有从事我的项目了。如果我没记错的话,我用restsharp以外的东西解决了它:-)
标签: c# xml xml-serialization restsharp