RestSharp/Json.NET将数组序列化为JSON对象

4

我有一个小问题。我正在使用RestSharp与一个Web服务进行交互,该服务要求我作为请求的一部分发送以下内容:

{
    "a":"a value",
    "b":"b value"
}

这很好,因为您可以简单地使用类似于以下的 class:

public class MyClass
{
    public string A { get; set; }
    public string B { get; set; }
}

然而,我不知道运行时的属性名称。因此,我尝试使用了一个 ExpandoObject,但当然,这只是序列化为一个 JSON 数组:

[
    "a":"a value",
    "b":"b value"
]

所以,看起来我需要能够将Dictionary(或IEnumerable<KeyValuePair<string,string>>)序列化(和反序列化)为JSON对象(换句话说,使用花括号而不是方括号)。

有人知道我该如何做到这一点吗,最好是使用Json.NET属性,以便在其他地方可以重用功能?


将对象字典序列化/反序列化为JSON格式,可以使用Json.NET库。在使用过程中,请确保对象类型已注册到JsonSerializer中。 - Anthony Johnston
那个帖子的问题是关于如何将一个复杂对象字典序列化为Json对象数组的细节。我的问题是关于如何将一个简单键值对字典序列化为单个Json对象:其中每个键都是属性名,每个值都是属性值。 - cwharris
2个回答

3

使用JObject怎么样?

var obj = new JObject();

obj["One"] = "Value One";
obj["Two"] = "Value Two";
obj["Three"] = "Value Three";

var serialized = obj.ToString(Formatting.None);

给你
{"One":"Value One","Two":"Value Two","Three":"Value Three"}

总是那些简单的事情让你出错,对吧?只有我这样吗?我会测试一下并回复你... :) - cwharris
这正好满足了我的需求。由于我想将序列化代码与领域分开,我只需循环遍历我想要序列化为对象的键值对,并将每个值分配给相应的JObject索引。 - cwharris
虽然这不是我寻找的“Attribute”解决方案,但是可以通过使用自定义转换器从中适应一些解决方案。 - cwharris
同意 @ChristopherHarris 的观点,我不能使用(或 ExpandoObject)进行反序列化 - 我只能得到空对象。 - ashes999
尝试使用 JObject.ToString() 方法,你也可以在此处指定格式和转换器。 - Anthony Johnston

0
使用 .NET 类库中的 JavaScriptSerializer 对象。它支持对正在序列化的对象进行反射。
请参阅 msdn 文档

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接