使用 ServiceStack JsonSerializer 反序列化包含 Dictionary 属性的类型

2024-06-26

下面的代码片段显示了我可以实现此目的的两种方法。第一个是使用MsgPack https://github.com/msgpack/msgpack-cli第二个测试是使用ServiceStack 的 JSONSerializer https://github.com/ServiceStack/ServiceStack.Text。第二个更有利,因为 ServiceStack.Text JSONSerializer 在我正在从事的整个项目中使用。

为什么使用 Dictionary> 时下面的第二个测试失败?

[TestFixture]
public class NeighbourhoodTests
{
    private Neighbourhood _myNeighbourhood;
    private Street _street;

    [SetUp]
    public void SetupOnEachTest()
    {
        _street = new Street() { Name = "Storgate" };
        _myNeighbourhood = SetupMyNeighbourhood(_street);
    }

    private static Neighbourhood SetupMyNeighbourhood(Street street)
    {
        var myNeighbourhood = new Neighbourhood();
        myNeighbourhood.Addresses = new Dictionary<Street, HashSet<int>>();

        myNeighbourhood.Addresses.Add(street, new HashSet<int>(new[] { 1, 2, 3, 4 }));
        myNeighbourhood.LocalCouncilName = "Stavanger";
        myNeighbourhood.RegionName = "Rogaland";
        return myNeighbourhood;
    }

    [Test]
    public void TestNeighbourhoodClass_OnMsgPackDeserialization_AddressesShouldEqualOriginalInput()
    {
        ObjectPacker packer = new ObjectPacker();
        var packedMessageBytes = packer.Pack(_myNeighbourhood);
        var unpackedMessage = packer.Unpack(packedMessageBytes);

        Assert.That(unpackedMessage.RegionName, Is.EqualTo("Rogaland"));
        Assert.That(unpackedMessage.Addresses, Is.Not.Empty);
        Assert.That(unpackedMessage.Addresses.Keys.Any(key => key.Name.Equals(_street.Name)));
    }

    [Test]
    public void TestNeighbourhoodClass_OnServiceStackJsonTextDeserialization_AddressesShouldEqualOriginalInput()
    {
        string serialisedMessage = JsonSerializer.SerializeToString(_myNeighbourhood);
        var deserializedMessage = JsonSerializer.DeserializeFromString(serialisedMessage);

        Assert.That(deserializedMessage.RegionName, Is.EqualTo("Rogaland"));
        Assert.That(deserializedMessage.Addresses, Is.Not.Empty);
        Assert.That(deserializedMessage.Addresses.Keys.Any(key => key.Name.Equals(_street.Name)));
    }
}

public class Neighbourhood
{
    public Dictionary<Street, HashSet<int>> Addresses { get; set; }
    public string LocalCouncilName { get; set; }
    public string RegionName { get; set; }
}

啊啊,感谢 @mortenrøgenes- 事实证明,我必须将 Neighborhood 类的 Addresses 属性包装到它自己的类型中,如下所示:

public class Addresses
{
    public Street Street{ get; set; }
    public HashSet<int> HouseNumbers { get; set; }
}
public class Neighbourhood
{
    public Addresses { get; set; }
    public string LocalCouncilName { get; set; }
    public string RegionName { get; set; }
}

这样 ServiceStack JSONSerializer 就能工作并且测试也会通过。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ServiceStack JsonSerializer 反序列化包含 Dictionary 属性的类型 的相关文章

  • 将 UTF8 字符串解码为拉丁文

    我正在尝试将 UTF8 字符串转换为拉丁字符 这是我如何尝试实现此目标的示例 string sUnicode Peneda Ger s string result Encoding Unicode GetString Encoding Co
  • 将 WindowState 设置为最大化会导致窗口过早出现

    我读到Load事件应该在创建窗口句柄后触发 但是before窗口实际上变得可见 在大多数情况下 这似乎是正确的 但是 我发现当我使用以下命令创建表单时WindowState属性设置为FormWindowState Maximized 通过
  • 如何将 C 静态库公开到 .Net?

    将 C 函数公开给 C 和 Net 有哪些步骤 我想在 C C 和 Net 中为 32 位和 64 位构建使用相同的函数名称 我发布这个问题和答案是因为我没有在任何地方找到这些技术的记录 步骤是 将 C 函数公开为 C 静态库 lib Us
  • 椭圆曲线加密的 .NET 实现(库)

    您能否建议在 NET 平台上使用椭圆曲线加密技术的任何实现 另外 如果您使用过它们 您能告诉我应该使用的推荐曲线吗 EDIT 正如 FatCat 提到的 它的实现在 NET Framework 3 5 中可用 但仅在 Windows Vis
  • 在列表框 WPF 中设置所选项目的边框

    如何在列表框中设置样式以获得所选项目周围的边框 最简单的方法是添加一个触发器IsSelected在 ItemContainerStyle 中ListBox
  • CngKey.Create 不支持请求的操作

    我正在尝试在 C 程序集中 以编程方式 动态生成自签名证书 目标 NET 4 0 作为根CA来生成其他证书 该证书不需要保留在 Windows 证书存储中 我会将其导出为文件 通读这个问题 https stackoverflow com q
  • 关闭 Quartz .Net 中的调试日志记录

    我正在使用 Quartz NET 在我们的应用程序中安排一些自定义任务 一切工作正常 只是它在一秒钟内记录大约二十个调试条目 我不知道如何关闭调试日志记录 任何帮助将非常感激 因为我一直试图在网上查找但没有运气 调试条目如下所示 DEBUG
  • 改变了 (un)serialize() 的行为?

    编辑 问题是现在已记录的 php 错误 https bugs php net bug php id 71617 https bugs php net bug php id 71617感谢您找到那个 Danack 我刚刚将应用程序从 PHPH
  • Web API 帮助页面显示每个方法的两个版本

    如何避免帮助页面显示我的方法的两个版本 正如你所看到的 我已经设置了一条自定义路线 api property search finnId 但我不希望使用查询参数的那个出现在 帮助 页面中 有办法解决这个问题吗 我正在使用 ASP NET F
  • 在没有实现 IEnumerable 的情况下,我们的自定义类数组如何与 foreach 一起使用?

    这个长标题已经包含了我所有的问题 所以我只想举个例子 MyClass array 在不实现 IEnumerable 接口方法的情况下 该数组如何与 Foreach 一起使用 Array http msdn microsoft com en
  • Google 协议缓冲区 - 用户定义的 java 对象作为消息字段

    我从昨天开始学习谷歌协议缓冲区 有一个问题 我可以使用用户定义的 java 类作为 proto 文件中的字段类型吗 让我通过以下详细信息来澄清我的问题 1 我有以下java类 MyComplexClass java package mypa
  • 当 DataContext 更改时立即更新 Binding

    我试图在更改 DataContext 后立即测量对象 但对象的绑定没有得到足够快的更新 这是我的代码 In MeasureOverride Size m inputWidth 0 0 Size elemSize new Size doubl
  • 从 SynchronizationContext 派生

    简而言之 我实现了一个从 SynchronizationContext 派生的类 以便 GUI 应用程序可以轻松地使用 GUI 线程以外的线程上引发的事件 我非常感谢对我的实施提出评论 具体来说 有什么是您建议反对的或可能会导致我未预见到的
  • 您如何使用 ReSharper 5 中的模式匹配功能?

    Resharper 5 的新模式匹配看起来非常强大 尽管需要一些修改才能弄清楚如何使用它 对于那些不熟悉此功能的人 它允许您在代码中搜索特定模式 此类模式的实例可以选择性地替换为替代方案 在 IntelliJ 中 这称为结构搜索和替换 它比
  • SerialPort.Open() --IOException --“参数不正确。”

    我编写了以下代码来在加载 MainForm 时配置串行端口 第一次运行时它给出IOException打开端口时 提示参数不正确 但当我重新启动应用程序时 它工作正常 仅当应用程序在启动计算机后第一次运行时才会出现异常 然后它可以正常工作直到
  • Web API 请求上的滑动会话

    UPDATE 看起来它正在尝试写入新的 cookie 标头ApplyResponseGrantAsync但不能因为它是抛出标头已发送的异常 UPDATE 更清楚 我如何获得Set Cookie在 Web API 请求期间添加到 XHR 响应
  • 如何清除客户端.Net SSL会话缓存

    我正在编写一个小测试工具 它使用 HttpWebRequest 来负载测试服务器 我想要 每次我尝试调用 HttpWebRequest GetResponse 时 它都会建立一个新的 SSL 会话 而不是使用缓存中的会话 注意 我提供客户端
  • 如何处理作为参数传递到方法中的 Lambda 表达式 - C# .NET 3.5

    我对 Lambda 表达式的了解有点不稳定 虽然我可以编写使用 Lambda 表达式 又名 LINQ 的代码 但我正在尝试编写自己的方法 该方法采用一些 Lambda 表达式类型的参数 背景 我正在尝试编写一个方法 该方法从任何其他对象类型
  • VS2010中VSHost.exe不断启动

    我正在 VS2010 中使用一个包含大量项目的解决方案 但它不断变得无响应 我注意到的一件事可能是一条线索 尽管我尚未开始任何调试 但 MyApplicationName vshost exe 不断出现在进程列表中 也许每当构建发生时它就会
  • 实体框架中的导航属性是什么

    我是实体框架的新手 当Visual Studio创建模型图时我们主要可以看到Entities Propertie和Navigation Properties这两个东西 那么这些Navigation Properties是什么 如何使用它们

随机推荐

  • “双免”是什么意思?

    正如标题所暗示的那样 我是 C 语言的新手 并且很快就会有期中考试 我目前正在修改过去的论文 一个反复出现的主题是双重自由问题 我理解就是调用的过程free 在同一个内存位置两次 但我有几个问题我不能 100 确定如何回答 问题1 C中双重
  • Powershell从网站ie.document下载文件方法

    我创建了一个小脚本 使用 Internet explore 11 登录到 https 网站 我手动单击鼠标将文件下载到 IE 但我收到保存打开文件的提示 我希望能够绕过此问题 因为我要在后台运行这个吗 我是否在 ie navigate ur
  • 我可以通过编程方式选择 Android 布局文件夹吗?

    我正在构建一个 Android 应用程序 它使用不同的布局文件夹 即 Large xlarge 等 根据屏幕尺寸调整大小 唯一的问题是 我想为用户提供一种在小屏幕布局和大屏幕布局之间切换的方法 以防他们拥有无法识别 xlarge 标签的前蜂
  • 为什么 python 的 __init__ 函数没有 return 语句,即使它是一个函数

    这可能是一个愚蠢的问题 但我很想知道答案 根据官方文件 init 不需要return语句 有什么特殊原因会这样吗 gt gt gt class Complex def init self realpart imagpart self r r
  • 查找缺失值

    我有一个表 有 2 个重要的列 DocEntry WebId 样本数据就像 DocEntry WebId 1 S001 2 S002 3 S003 4 S005 现在我们可以注意到 在 WebId 列中 S004 丢失了 我们如何通过查询找
  • 与正在运行的进程通信

    We have 基于Python的服务器 A 正在运行的命令行应用程序 在同一台 Linux 机器上 能够读取stdin 计算一些东西并将输出提供给stdout B 将输入从 A 发送到的最佳 最优雅 方式是什么 stdin B 的 并等待
  • Android Widget 实现

    嗨 如果这个问题很愚蠢 我提前道歉 我对 Android 编程相当陌生 而且学得很快 我刚刚创建了一个任务提醒应用程序 并且想将该应用程序转换 实现为一个可以在主屏幕上查看的小部件 有什么方法吗 这可能吗 Thanks 如果没有更多关于您的
  • 从文件夹中读取java文件

    我开发了一个应用程序 可以从用户选择的文件夹中读取文件 它显示每个文件中有多少行代码 我只想在文件选择器中显示 Java 文件 具有 java 扩展名的文件 下面是我的代码 public static void main String ar
  • 我应该在mean.js中添加模块依赖项(对于ng-sortable)

    我正在尝试将 ng sortable 添加到我的基于mean js 的应用程序中 https github com a5hik ng sortable https github com a5hik ng sortable 按照安装说明并将其
  • 在 Jetpack compose 中使用 ModalDrawer 从右向左打开导航抽屉

    我一直在尝试在 Jetpack compose 中实现导航抽屉 以下代码显示了一种简单的方法 Composable fun ModalDrawerSample val drawerState rememberDrawerState Draw
  • 我的递归条件是否正确计算二叉树高度?

    我想在你的帮助下知道我的代码是对还是错 因为遗憾的是我无法运行它来检查 没有编译错误 我想做的是找到二叉树的高度 当然 树不必是平衡的 二叉树中的每个节点可以有两个节点作为子节点 http en wikipedia org wiki Bin
  • 解雇ViewControllerAnimated:完成:在 iOS 8 上

    在 iOS dismissViewControllerAnimated completion 会导致presentedViewController being nil 在 iOS 8 中 presentedViewController仍然指
  • 如何在 PHP 中获取有用的错误消息?

    我经常尝试运行 PHP 脚本 但只是得到一个空白屏幕 无错误信息 只是一个空屏幕 原因可能是一个简单的语法错误 错误的括号 缺少分号 或者函数调用失败 或者完全是其他原因 很难找出哪里出了问题 我最终注释掉了代码 在各处输入 echo 语句
  • 致命Python错误:init_import_size:无法在Anaconda Prompt中导入站点模块

    当我启动 Anaconda Prompt 时 收到以下错误消息 致命 Python 错误 init import size 无法导入站点模块 Python运行时状态 已初始化回溯 最近一次调用最后一次 文件 C Users blue App
  • 如何在 UICollectionView PerformBatchUpdates 块中排序移动、插入、删除和更新?

    In my UICollectionView 我使用一个简单的自定义对象数组来生成和显示单元格 有时数据会发生变化 我想一次性为所有变化添加动画效果 我选择通过跟踪第二个数组中的所有更改 比较两个数组并在一个数组内生成一组移动 插入 删除和
  • 带有 pygame 的 Pyinstaller

    我曾多次尝试使用 PyInstaller 来捆绑我的 Python2 程序 但它似乎从未与 Pygame 模块一起使用 我已经看到了有关此主题的许多其他问题 但我找不到任何有用的答案 有人知道这个问题的解决方案吗 我正在尝试在 Ubuntu
  • iPhone - 动画视图控制器演示

    我有一个 UINavigationControl 我想呈现一个视图控制器 将其从顶部推送 并将其从视图中删除 将其推送到顶部 有没有办法更改调用时使用的默认动画 self navigationController pushViewContr
  • Psycopg2 中的元命令 - \d 不起作用

    我希望使用列出表的所有列名psycopg2Python 包 2 7 但我无法执行以下查询 cur execute d my table psycopg2 ProgrammingError syntax error at or near 对于
  • 有向图 SQL

    我有以下数据集 它表示有向图中的节点 CREATE TABLE nodes NODE FROM VARCHAR2 10 NODE TO VARCHAR2 10 INSERT INTO nodes VALUES GT TG INSERT IN
  • 使用 ServiceStack JsonSerializer 反序列化包含 Dictionary 属性的类型

    下面的代码片段显示了我可以实现此目的的两种方法 第一个是使用MsgPack https github com msgpack msgpack cli第二个测试是使用ServiceStack 的 JSONSerializer https gi