【问题标题】:Restsharp - Exception due to XElement propertyRestsharp - 由于 XElement 属性导致的异常
【发布时间】:2015-01-22 00:11:39
【问题描述】:

我需要发出一个 REST 请求并传递一个具有 XElement 类型属性的对象。

对象:

public class Test
{
    public string Property1 {get;set;}
    public XElement PropertyXml {get;set;}
}

代码:

var testObj = new Test();
testObj.Property1 = "value";
testObj.PropertyXml = new XElement("test");
var level1 = new XElement("level1", "value111");
testObj.PropertyXml.Add(level1);

var client = new RestClient();

client.BaseUrl = new Uri(string.Format(_url));
var rRequest = new RestRequest(_address, Method.POST);
rRequest.RequestFormat = DataFormat.Json;
rRequest.AddBody(testObj);
var response = client.Execute(rRequest);

我在调用 AddBody 的那一行得到一个“System.StackOverflowException”。 PS 我可以使用 HttpClient(我使用 PostAsJsonAsync 方法)而不是 Restsharp 传递一个 Test 对象。

任何想法都将不胜感激..

【问题讨论】:

  • 您使用的是哪个版本的restsharp?如果您使用高于 103 的版本,则需要使用 rRequest.JsonSerializer = new JsonSerializer(); 将 JSON 序列化程序设置回 JSON.net,其中来自 github.com/restsharp/RestSharp/blob/…

标签: restsharp


【解决方案1】:

RestSharp 没有 XElement 的固有知识,AddBody 将尝试像任何其他 POCO 类型一样序列化它 - 通过遍历它的属性。你可以很容易地看到这个过程陷入无限循环:

testObj.FirstNode.Parent.FirstNode.Parent....

最好的办法是将 PropertyXml 属性的类型更改为 XML 结构可以轻松映射到的简单 POCO 类型。比如:

public class PropertyStructure
{
    public string level1 {get;set;}
}

public class Test
{
    public string Property1 {get; set;}
    public PropertyStructure PropertyXml {get; set;}
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-07
    • 2014-10-11
    • 1970-01-01
    • 2016-01-18
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多