c# 自定义 Dictionary 接受重复键进行序列化

2023-11-29

我需要实现一个有点类似字典的自定义功能,但可以插入重复的键。所以基本上我需要从 Dictionary 中得到的是将对象序列化为以下 JSON 的可能性:

{
  "One":"Value 1",
  "Two":"Value x",
  "One":"Value 10",
  "Two":"Value 100"
} 

正如你在上面看到的,我有重复的键......

有什么建议吗?重点是上面格式的 JSON 输出

Edit:

KeyValuePair<string,string>不起作用!

这是结果:

[{"Key":"One","Value":"Two"},{"Key":"One","Value":"Two"}]

正如您所看到的,序列化为 JSON 会将 Key 和 Value 关键字放在一起,字典将用实际的键值替换 Key,用提供的值替换 Value。


您可以使用List<KeyValuePair<TKey, TValue>>代替Dictionary<TKey, TValue>。在你的情况下,这将是List<KeyValuePair<string, string>>.

Edit:

如果您正在使用Json.NET对于 JSON 的序列化,您可以使用自定义转换器实现所需的输出。答案here提供它(我做了轻微修改):

class KeyValuePairConverter : JsonConverter
{
    public override void WriteJson(JsonWriter writer, object value, 
                                                      JsonSerializer serializer)
    {
        var list = value as List<KeyValuePair<string, string>>;
        writer.WriteStartArray();
        foreach (var item in list)
        {
            writer.WriteStartObject();
            writer.WritePropertyName(item.Key);
            writer.WriteValue(item.Value);
            writer.WriteEndObject();
        }
        writer.WriteEndArray();
    }

    public override object ReadJson(JsonReader reader, Type objectType,
                                                       object existingValue,
                                                       JsonSerializer serializer)
    {
        // TODO...
    }

    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(List<KeyValuePair<string, string>>);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c# 自定义 Dictionary 接受重复键进行序列化 的相关文章

  • 如何在类文件中使用 Url.Action() ?

    如何在 MVC 项目的类文件中使用 Url Action Like namespace 3harf public class myFunction public static void CheckUserAdminPanelPermissi
  • 前向声明类型和“已声明为类类型的非类类型”

    我对以下代码有问题 template
  • 从复选框列表中选择循环生成的复选框中的一个复选框

    抱歉我的英语不好 在我的 ASP NET 网站上 我从 SQL 表导入软件列表 看起来像这样 但实际上要长得多 Microsoft Application Error Reporting br br Microsoft Applicatio
  • 如何将 SOLID 原则应用到现有项目中

    我对这个问题的主观性表示歉意 但我有点卡住了 我希望之前处理过这个问题的人能够提供一些指导和建议 我有 现在已经成为 一个用 C 2 0 编写的非常大的 RESTful API 项目 并且我的一些类已经变得巨大 我的主要 API 类就是一个
  • 有些有助于理解“产量”

    在我不断追求少吸的过程中 我试图理解 产量 的说法 但我不断遇到同样的错误 someMethod 的主体不能是迭代器块 因为 System Collections Generic List 不是迭代器接口类型 这是我被卡住的代码 forea
  • cpp.react库的C++源代码中奇怪的“->* []”表达式

    这是我在文档中找到的 C 片段cpp react 库 https github com schlangster cpp react implicit parallelism auto in D MakeVar 0 auto op1 in g
  • 即使没有异步,CallContext.LogicalGetData 也会恢复。为什么?

    我注意到CallContext LogicalSetData LogicalGetData不按照我期望的方式工作 内部设置的值async方法得到恢复即使没有异步或任何类型的线程切换 无论如何 这是一个简单的例子 using System u
  • Eigen 和 OpenMP:由于错误共享和线程开销而没有并行化

    系统规格 Intel Xeon E7 v3 处理器 4 插槽 16 核 插槽 2 线程 核心 Eigen 系列和 C 的使用 以下是代码片段的串行实现 Eigen VectorXd get Row const int j const int
  • 如何使用 ASP.NET Core 获取其他用户的声明

    我仍在学习 ASP NET Core 的身份 我正在进行基于声明的令牌授权 大多数示例都是关于 当前 登录用户的 就我而言 我的 RPC 服务正在接收身份数据库中某个用户的用户名和密码 我需要 验证是否存在具有此类凭据的用户 获取该用户的所
  • C++中判断unicode字符是全角还是半角

    我正在编写一个终端 控制台 应用程序 该应用程序应该包装任意 unicode 文本 终端通常使用等宽 固定宽度 字体 因此要换行文本 只需计算字符数并观察单词是否适合一行并采取相应的操作 问题是 Unicode 表中的全角字符在终端中占用了
  • Elm:如何从 JSON API 解码数据

    我有这个数据使用http jsonapi org http jsonapi org format data type prospect id 1 attributes provider user id 1 provider facebook
  • 在 C# 中为父窗体中的子窗体控件添加事件处理程序

    我有两种形式 一种是带有按钮和文本框的父表单 单击该按钮时 将打开一个对话框 该子窗体又包含一个文本框和一个按钮 现在我想要的是 每当子表单文本框中的文本更改时 父表单文本框中的文本会自动更改 为了获得这个 我所做的是 Form3 f3 n
  • C++ - 多维数组

    处理多维数组时 是否可以为数组分配两种不同的变量类型 例如你有数组int example i j 有可能吗i and j是两种完全不同的变量类型 例如 int 和 string 听起来您正在寻找 std vector
  • 将函数参数类型提取为参数包

    这是一个后续问题 解包 元组以调用匹配的函数指针 https stackoverflow com questions 7858817 unpacking a tuple to call a matching function pointer
  • 模板类中的无效数据类型生成编译时错误?

    我正在使用 C 创建一个字符串类 我希望该类仅接受数据类型 char 和 wchar t 并且我希望编译器在编译时使用 error 捕获任何无效数据类型 我不喜欢使用assert 我怎样才能做到这一点 您可以使用静态断言 促进提供一个 ht
  • C++:为什么 numeric_limits 对它不知道的类型起作用?

    我创建了自己的类型 没有任何比较器 也没有专门化std numeric limits 尽管如此 由于某种原因 std numeric limits
  • WPF DataGrid / ListView 绑定到数组 mvvm

    我们假设你有 N 个整数的数组 表示行数的整数值 在模型中 该整数绑定到视图中的 ComboBox Q1 如何将数组 或数组的各个项目 绑定到 DataGrid 或 ListView 控件 以便 当您更改 ComboBox 值时 只有那么多
  • 了解 Lambda 表达式和委托 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经尝试解决这个问题很长一段时间了 阅读在线博客和文章 但到目前为止还没有成功 什么是代表 什么是 Lambda 表达式 两者的优点
  • 在 Win32 控制台应用程序中设置光标位置

    如何在 Win32 控制台应用程序中设置光标位置 最好 我想避免制作句柄并使用 Windows 控制台功能 我花了整个早上沿着那条黑暗的小巷跑 它产生的问题比它解决的问题还要多 我似乎记得当我在大学时使用 stdio 做这件事相对简单 但我
  • 如何在单元测试中使用 JSON 发送请求

    我的 Flask 应用程序中有在请求中使用 JSON 的代码 我可以像这样获取 JSON 对象 Request request get json 这一直工作得很好 但是我正在尝试使用 Python 的 unittest 模块创建单元测试 但

随机推荐

  • 使用元数据为超级列创建 Cassandra 架构

    我希望使用 cassandra cli 在我的数据库中具有以下结构 例如 我有一个人有地址 该地址包含邮政编码 门牌号等 原理图看起来像这样 name address value city name city value San Franc
  • 如何在 JavaScript 中对 1970 年以下的日期进行排序?

    所以我正在对日期进行排序 有一个日期1967 08 07 正确的做法是什么 unix时间戳是负数 我还没有找到任何在JS中如何做的线索 The ISO 8601 1967 08 07 结构很容易作为字符串排序 因为它的第一部分是年份 后面是
  • 当我使用 TRANSPOSE 将数组粘贴到工作表中时,为什么我的数组会破坏列?

    在 Excel 中 我使用 VBA 创建一个数组来收集数据 然后将其粘贴回工作表中 这在较小的数据集 约 15 000 行 上运行良好 但当我移动到较大的数据集 约 117 000 行 时 转置 步骤中发生了一些情况 在数组中 我想将标题和
  • java与c中的三元运算符[重复]

    这个问题在这里已经有答案了 为什么这个三元运算符在这里不起作用 但在 c 中却可以完美地工作 import java util Scanner class Pack public static void main String args S
  • 将 RecyclerView 单击的项目移动到顶部

    我有一个包含 n 个项目的 recyclerView 每个项目都可以在单击时展开 我希望我的项目能够展开并在单击时移动到顶部 假设如果我单击第三个项目 那么它应该移动到第一个项目位置 然后它将展开并且滚动应该停止 我已经设法用动画扩展 Re
  • 返回数组元素时,非常量引用的初始化无效

    我正在编写一个包装动态分配数组的类 并且正在尝试编写operator 函数 目前我有 bool solution operator unsigned int pos if pos lt size return this gt data po
  • 在 iPhone 上获取 DNS 服务器 IP

    我正在尝试使用以下命令获取我的 dns 服务器 IPlibresolv框架 但我得到的只是 0 0 0 0 void getDns res init for int i 0 i
  • 最小化单应性矩阵的误差

    我有一个单应性矩阵 h1 h2 h3 h4 h5 h6 h7 h8 h9 我改变了一个点p1 to P1使用上面的单应性矩阵 相似地 p2 to P2 p3 to P3 p4 to P4 我知道之间的区别 P1 P2 D1 P2 P3 D2
  • Shell 脚本删除数字字符串后的新行

    我需要编写一个 SHELL 脚本来仅在数字字符串之后删除新行 或者字符串不以数字开头 例如有一个文件 asasas 12345 adab 123 123 我需要这样的输出 asasas 12345 adab 123 123 sed a N
  • simplexml_load_file 和 simplexml_load_string 之间的区别

    我想将 xml 文件放入我的程序中并将其放入数组中 以便我可以将其放入表中 我想知道如何做到这一点 并且我已经阅读了 php 手册 但我似乎无法掌握它 为了做我想做的事 我需要使用simplexml load string 或者我需要命令他
  • Apache SetEnvIf 麻烦

    我的中有以下内容 htaccess file SetEnvIf Host example com myvar 1
  • 如何使用 XML::LibXML 解析 XML 文档并构建 Perl 哈希

    我有这样的 XML 数据
  • 如何用Flutter实现position:sticky和bottom 0?

    我想建立一个带有粘性页脚的列表视图 例如本文的 粘到底 在颤振中 In CSS main footer position sticky bottom 0 但是 Flutter 该怎么办呢 我想要的是 可滚动的大内容 页脚 粘性 可滚动的大内
  • JavaScript 闭包和 setTimeout

    闭包是我在 JS 中还没有完全掌握的东西 我认为这是一个封闭问题 我正在尝试创建一个进度条 每隔 x 秒我想增加 DIV 的宽度 这是应该执行此操作的部分 for i 0 i lt counter i setTimeout function
  • System.Drawing.Graphics.DpiX 始终返回 96

    我有 vb net winform 应用程序 自动缩放模式 dpi 自动缩放 假 自动调整大小 true 更改 DPI 设置后我已退出 我也尝试过重新启动机器 Using g As Graphics form CreateGraphics
  • 如何将我的代码从 v11 迁移到 Discord.js v12?

    我升级到 Discord js v12 但它破坏了我现有的 v11 代码 以下是导致错误的一些示例 TypeError client users get is not a function const user client users g
  • Android 中用颜色填充 ArrayList

    我想创建2个ArrayList 一种持有 16 种颜色 另一种持有 139 种颜色 我有颜色列表 RGB 为 255 126 32 十六进制为 0xFFFF2552 我想使用 ArrayList 稍后从中选择随机颜色 我试过 int 但不起
  • 在通过管道将 STDOUT 传输到文件时捕获 STDERR 的输出

    我的情况很奇怪 我正在尝试使用 Perl 自动备份 SVN 存储库集合 我正在使用 svnadmin dump 命令 该命令将转储发送到 STDOUT 并将遇到的任何错误发送到 STDERR 我需要运行的命令的形式为 svnadmin du
  • 对可拖动项目应用双击

    我有一个黄色按钮 可以将其拖放到灰色面板上 我使用 handleDragStop 函数来处理用户拖放黄色按钮时需要完成的所有任务 一切都很好 但是 我想知道如何启用用户双击黄色按钮的行为并具有与拖放时相同的行为 top icon dragg
  • c# 自定义 Dictionary 接受重复键进行序列化

    我需要实现一个有点类似字典的自定义功能 但可以插入重复的键 所以基本上我需要从 Dictionary 中得到的是将对象序列化为以下 JSON 的可能性 One Value 1 Two Value x One Value 10 Two Val