如何使用 RestSharp 发送具有动态属性的 JSON?

How to send JSON with dynamic properties using RestSharp?

我想创建一个 JSON 对象,它有一个动态 属性 来向外部 API 发送请求。 示例:

{
    "prop1": "val1",
    "prop2": "val2",
    "prop3": {
        "dynamic_prop": "val"
    }
}

这是唯一能让我得到有效回复的代码:

var request = new RestRequest(url, Method.PUT);
request.AddHeader("content-type", "application/json");

var body = new
{
    prop1 = "val1",
    prop2 = "val2",
    prop3 = new { dynamic_prop = "val" }
};

request.AddJsonBody(body);

但是,在这种情况下 dynamic_prop 不是动态的。正如我所读的那样,匿名类型不能有动态道具。

我尝试使用 JObject:

var jobject = JObject.Parse("{\"dynamic_prop\":\"val\"}");
var body = new
{
    prop1 = "val1",
    prop2 = "val2",
    prop3 = jobject
};

但是 JObject 没有正确序列化,我得到 [[[]]],我猜是因为该对象有许多其他属性(首先,ChildrenTokens 等),[=18 也是如此=].我也尝试过 ExpandoObject 但无法正常工作。

JObject 被序列化为 [[[]]] 因为 RestSharp 的序列化程序将其视为 IEnumerable 而不是字典。

但是这里不需要使用JObject;只需使用 Dictionary<string, string> 创建动态 属性:

var dict = new Dictionary<string, string>();
dict.Add("dynamic_prop", "val");
var body = new
{
    prop1 = "val1",
    prop2 = "val2",
    prop3 = dict
};