【问题标题】:RestSharp/Json.NET Serialize Array as JSON ObjectRestSharp/Json.NET 将数组序列化为 JSON 对象
【发布时间】:2012-04-17 21:41:23
【问题描述】:

我有一点小情况。我正在使用 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 数组的详细信息。我的问题是关于如何将简单键值对的字典序列化为单个 Json 对象:其中每个键是一个属性名称,每个值是一个属性值。

标签: c# .net serialization json.net restsharp


【解决方案1】:

使用 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"}

【讨论】:

  • 最简单的事情总是能吸引你,对吧?我是唯一一个?我会对此进行测试并回复您... :)
  • 这完全符合我的需要。由于我想让我的序列化代码与我的域分开,我只是循环遍历我想序列化为对象的键值对,并将每个值分配给相应的 JObject 的索引。
  • 虽然这不是我正在寻找的Attribute 解决方案,但可以使用自定义转换器从中调整一些解决方案。
  • 同意@ChristopherHarris,我不能使用这个(或ExpandoObject)反序列化——我只是得到空对象
  • 试试 JObject.ToString(),你也可以在这里指定格式和转换器
【解决方案2】:

使用 .net 类库中的 JavascripSerializer 对象。它支持对正在序列化的对象的反射

msdn docs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-14
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多