【问题标题】:Serializing an object containing a Dictionary such that the Dictionary keys/values are rendered as part of the containing object [duplicate]序列化包含字典的对象,以便将字典键/值呈现为包含对象的一部分 [重复]
【发布时间】:2014-04-02 01:53:10
【问题描述】:

我有一堂课如下:

public class Usage
{
    public string app { get; set; }

    public Dictionary<string, string> KVPs { get; set; }
}

当我使用这段代码时:

var json = new JavaScriptSerializer().Serialize(usage);

它给了我这个 JSON:

{"app":"myapp", "KVPs":{"k1":"v1", "k2":"v2"}}

我希望它返回类似的东西:

{"app":"myapp", "k1":"v1", "k2":"v2"}

有没有办法做到这一点?我目前正在使用JavaScriptSerializer。如果有使用 JSON.Net 的方法,我愿意改用它。

【问题讨论】:

  • JavaScriptSerializer 不是 JSON.NET
  • 哦,对不起,我原来使用的是 JaveScriptSerializer,尝试用 JSON.net 替换它。谢谢

标签: c# json dictionary serialization json.net


【解决方案1】:

不漂亮,但这会工作......

usage.KVPs["app"] = usage.app;
json = new JavaScriptSerializer().Serialize(usage.KVPs)

【讨论】:

  • 谢谢。这将工作
  • 如果这是您想要接受的答案,请点击小勾号图标
【解决方案2】:

如果您想使用 JSON.Net 并且愿意将字典的类型从 Dictionary&lt;string, string&gt; 更改为 Dictionary&lt;string, object&gt;,那么实现此目的的一种简单方法是将 [JsonExtensionData] 属性添加到您的字典像这样的属性:

public class Usage
{
    public string app { get; set; }

    [JsonExtensionData]
    public Dictionary<string, object> KVPs { get; set; }
}

然后你可以像这样序列化你的对象:

string json = JsonConvert.SerializeObject(usage);

这将为您提供所需的 JSON:

{"app":"myapp","k1":"v1","k2":"v2"}

另外,如果需要,您可以轻松地将 JSON 反序列化回您的 Usage 类。 JSON 中与类成员不匹配的任何属性都将放入KVPs 字典中。

Usage usage = JsonConvert.DeserializeObject<Usage>(json);

【讨论】:

    猜你喜欢
    • 2011-10-25
    • 1970-01-01
    • 2012-09-06
    • 2019-05-10
    • 2013-10-30
    • 1970-01-01
    • 2012-12-23
    • 2015-08-24
    • 1970-01-01
    相关资源
    最近更新 更多