JSON.NET 无法反序列化包装的集合

2024-01-25

我有一个包装好的列表,如下所示:

[Serializable]
public class OrderManager : IEnumerable<Order>
{
    public OrderManager()
    { }

    private List<Order> orders = new List<Order>();

    public void AddOrder(Order order)
    {
        orders.Add(order);
    }

    public IEnumerator<Order> GetEnumerator()
    {
        return orders.GetEnumerator();
    }

    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
    {
        return orders.GetEnumerator();
    }
}

我在客户类中包含一个字段实例,如下所示:

[Serializable]
public class Customer
{
    public Customer()
    { }

    private OrderManager _orders
        = new OrderManager();
    public OrderManager Orders
    {
        get { return _orders; }
        set { _orders = value; }
    }
}

我像这样创建 JSON.NET 序列化器:

private JsonSerializer GetSerializer()
{
    var serializer = new JsonSerializer();

    // on or off the type name handling doesn't help
    //serializer.TypeNameHandling = TypeNameHandling.All;

    var contractResolver = new DefaultContractResolver(true);
    contractResolver.IgnoreSerializableAttribute = false;
    contractResolver.IgnoreSerializableInterface = false;

    serializer.ContractResolver = contractResolver;

    serializer.PreserveReferencesHandling = PreserveReferencesHandling.All;
    serializer.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;

    return serializer;          
}

客户对象的序列化有效,但在反序列化期间出现错误:

将值设置为“_orders”时出错 “测试.序列化测试+客户”。

将 TypeNameHandling 设置为 All 后,我得到:

Type specified in JSON 'Tests.SerializationTests+Order[], Tests, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' is not compatible with 'Tests.SerializationTests+OrderManager, Tests, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. Path '_orders.$type', line 1, position 232.

知道如何让 Json.NET 很好地处理包装列表吗?


我想你需要实施ICollection<Order>

public class OrderManager : IEnumerable<Order>,ICollection<Order>

-

[Serializable]
public class OrderManager : IEnumerable<Order>,ICollection<Order>
{
    public OrderManager()
    { }

    private List<Order> orders = new List<Order>();

    public Order this[int i]
    {
        set { AddOrder(value); }
        get { return orders[i]; }
    }

    public void AddOrder(Order order)
    {
        orders.Add(order);
    }

    public IEnumerator<Order> GetEnumerator()
    {
        return orders.GetEnumerator();
    }

    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
    {
        return orders.GetEnumerator();
    }

    public void Add(Order item)
    {
        AddOrder(item);
    }

    public void Clear()
    {
        orders.Clear();
    }

    public bool Contains(Order item)
    {
        return orders.Contains(item);
    }

    public void CopyTo(Order[] array, int arrayIndex)
    {
        throw new NotImplementedException();
    }

    public int Count
    {
        get { return orders.Count; }
    }

    public bool IsReadOnly
    {
        get { return false; }
    }

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

JSON.NET 无法反序列化包装的集合 的相关文章

  • 查找哪些页面不再与写入时复制共享

    假设我在 Linux 中有一个进程 我从中fork 另一个相同的过程 后forking 因为原始进程将开始写入内存 Linux写时复制机制将为进程提供与分叉进程使用的不同的唯一物理内存页 在执行的某个时刻 我如何知道原始进程的哪些页面已被写
  • ASP.NET MVC 中的经典 ASP (C#)

    我有一个应用程序想要 最终 转换为 ASP NET MVC 我想要进行全面的服务升级 到 ASP NET 但想要使用当前的 ASP 内容来运行当前的功能 这样我就可以在对新框架进行增量升级的同时升级小部分 该站点严重依赖于不太成熟的 VB6
  • OpenCv读/写视频色差

    我试图简单地使用 openCV 打开视频 处理帧并将处理后的帧写入新的视频文件 我的问题是 即使我根本不处理帧 只是打开视频 使用 VideoCapture 读取帧并使用 VideoWriter 将它们写入新文件 输出文件看起来比输入更 绿
  • 使用具有现有访问令牌的 Google API .NET 客户端

    用例如下 移动应用程序正在通过 Google 对用户进行身份验证 并且在某些时候 我们需要将用户的视频发布到他的 YouTube 帐户 出于实际原因 实际发布应该由后端完成 已经存储在那里的大文件 由于用户已经通过应用程序的身份验证 因此应
  • 向 ExpandoObject 添加方法时,“关键字 'this' 在静态属性、静态方法或静态字段初始值设定项中无效”

    我尝试向 ExpandoObject 添加一个动态方法 该方法将返回属性 动态添加 给它 但它总是给我错误 我在这里做错了什么吗 using System using System Collections Generic using Sys
  • 32 位应用程序的特征最大矩阵大小

    所以 我正在寻找Eigen http eigen tuxfamily org index php title Main Page当我尝试声明大于 10000x10000 的矩阵时 包崩溃 我需要声明一个像这样的矩阵 可靠地大约有 13000
  • 使用post方法将多个参数发送到asp.net core 3 mvc操作

    使用 http post 方法向 asp net mvc core 3 操作发送具有多个参数的 ajax 请求时存在问题 参数不绑定 在 dot net 框架 asp net web api 中存在类似的限制 但在 asp net mvc
  • C# 中的接口继承

    我试图解决我在编写应用程序时遇到的相当大的 对我来说 问题 请看这个 为了简单起见 我将尝试缩短代码 我有一个名为的根接口IRepository
  • 显示异常时的自定义错误消息:从客户端检测到潜在危险的 Request.Form 值

    我在我的 Web 应用程序中使用 ASP NET 的登录控件 当发生此异常时 我想在标签上显示一种有趣的错误类型System Web HttpRequestValidationException A potentially dangerou
  • 访问者和模板化虚拟方法

    在一个典型的实现中Visitor模式 该类必须考虑基类的所有变体 后代 在许多情况下 访问者中的相同方法内容应用于不同的方法 在这种情况下 模板化的虚拟方法是理想的选择 但目前这是不允许的 那么 模板化方法可以用来解析父类的虚方法吗 鉴于
  • 在 2D 中将一个点旋转另一个点

    我想知道当一个点相对于另一个点旋转一定角度时如何计算出新的坐标 我有一个块箭头 想要将其相对于箭头底部中间的点旋转角度 theta 这是允许我在两个屏幕控件之间绘制多边形所必需的 我无法使用和旋转图像 从我到目前为止所考虑的情况来看 使问题
  • 无法将类型“System.IO.Stream”隐式转换为“Java.IO.InputStream”

    我提到了一些类似的问题 但没有一个涉及IO 当我使用时 我在java中使用了相同的代码Eclipse 那次就成功了 但现在我尝试在中使用这段代码Mono for Android C 它不起作用 我正在尝试运行此代码来创建一个InputStr
  • 当模板类不包含可用的成员函数时,如何在编译时验证模板参数?

    我有以下模板struct template
  • 当我“绘制”线条时,如何将点平均分配到 LineRenderer 的宽度曲线?

    我正在使用线条渲染器创建一个 绘图 应用程序 现在我尝试使用线条渲染器上的宽度曲线启用笔压 问题在于 AnimationCurve 的 时间 值 水平轴 从 0 标准化为 1 因此我不能在每次添加位置时都在其末尾添加一个值 除非有一个我不知
  • 是否可以有一个 out ParameterExpression?

    我想定义一个 Lambda 表达式out范围 有可能做到吗 下面是我尝试过的 C Net 4 0 控制台应用程序的代码片段 正如您在 procedure25 中看到的 我可以使用 lambda 表达式来定义具有输出参数的委托 但是 当我想使
  • strcmp 给出分段错误[重复]

    这个问题在这里已经有答案了 这是我的代码给出分段错误 include
  • 剪贴板在 .NET 3.5 和 4 中的行为有所不同,但为什么呢?

    我们最近将一个非常大的项目从 NET Framework 3 5 升级到 4 最初一切似乎都工作正常 但现在复制粘贴操作开始出现错误 我已经成功制作了一个小型的可复制应用程序 它显示了 NET 3 5 和 4 中的不同行为 我还找到了一种解
  • 运算符“==”不能应用于“int”和“string”类型的操作数

    我正在编写一个程序 我想到了一个数字 然后计算机猜测了它 我一边尝试一边测试它 但我不断收到不应该出现的错误 错误是主题标题 我使用 Int Parse 来转换我的字符串 但我不知道为什么会收到错误 我知道它说 不能与整数一起使用 但我在网
  • 使用 C# 从 DateTime 获取日期

    愚蠢的问题 给定日期时间中的日期 我知道它是星期二 例如我如何知道它的 tue 2 和 mon 1 等 Thanks 您正在寻找星期几 http msdn microsoft com en us library system datetim
  • 匿名结构体作为返回类型

    下面的代码编译得很好VC 19 00 23506 http rextester com GMUP11493 标志 Wall WX Za 与VC 19 10 25109 0 标志 Wall WX Za permissive 这可以在以下位置检

随机推荐

  • 从 JSF 中的托管 bean 获取资源文件的路径

    我遇到这种情况 我试图在从托管 bean 中放置新的头像图像之前删除用户的旧头像图像 String fileName resources img useravatars getSessionBean getSearchAccount get
  • Dagger v2:将 2 个不同的范围注入到一个对象中

    我将 moduleA 设置为应用程序范围的单例提供程序 将 ModuleB 设置为用户相关的对象提供程序 我的用户显示片段将使用系统范围总线向其他人发送消息并使用用户相关对象进行显示 问题是无法将不同的作用域类注入一个对象 使用 compo
  • 动态设置DIV的高度

    在 Web 应用程序中 我有一个页面 其中包含一个 DIV 该 DIV 具有自动宽度 具体取决于浏览器窗口的宽度 我需要对象的自动高度 DIV 从距顶部屏幕约 300 像素的位置开始 其高度应使其延伸到浏览器屏幕的底部 我有容器 DIV 的
  • invoke virtual 总是动态绑定吗?

    今天我的一位朋友告诉我 如果一条指令是invoke virtual 那么它总是动态绑定 而invokespecial总是静态绑定 这是真的吗 如果是 那么为什么当带有final关键字的方法也调用virtual时呢 请澄清我的这个疑问 从本质
  • 基于 APR 的 Apache Tomcat Native 库的不兼容版本 [1.1.34]

    在我的 openSUSE Leap 42 3 服务器上 在嵌入式 Tomcat 服务器上启动 Spring Boot 2 0 0 M6 应用程序期间 我在日志中看到以下错误 ERROR 30471 main o a catalina cor
  • 检查字符是否为数字?

    我需要检查是否justPrices i substr commapos 2 1 该字符串类似于 blabla 120 在本例中 它将检查 0 是否是一个数字 如何才能做到这一点 您可以使用比较运算符来查看它是否在数字字符范围内 var c
  • 基于 Spring Javaconfig 的按名称自动装配不起作用

    我正在尝试使用基于 Javaconfig 的 Spring 配置 我有两个相同类型的 bean 并尝试通过限定符自动装配它们 但它似乎不起作用 这是我的配置类 Configuration EnableAutoConfiguration Co
  • 从日期选择器获取可用性

    我试图通过单击日期选择器日历中的下一个按钮来获取 homeaway 每天的价格 但没有运气 我当前的代码是这样的 def handle self args options def homeaway self display Display
  • 判断线段的方向是顺时针还是逆时针

    我有一个代表曲线段的二维点 x1 y1 x2 y2 Xn Yn 列表 是否有任何公式可以确定绘制该段的方向是顺时针还是顺时针逆时针 任何帮助表示赞赏 或者 您可以使用一些线性代数 如果按顺序有 a b 和 c 三个点 则执行以下操作 1 c
  • 方法语法“public function direct(){}”在 PHP 中如何工作?

    我现在正在学习 Zend Framework 并遇到了以下语法 class Zend Controller Action Helper Redirector extends Zend Controller Action Helper Abs
  • 为什么不在 java servlet 中创建 pdf 文档? [复制]

    这个问题在这里已经有答案了 我使用 iText Pdfbox 创建 PDF 文档 当我使用独立的 Java 类创建 PDF 时 一切正常 public static void main String args 该文档已正确创建 但我需要从
  • 不使用 SendMessage 和 PostMessage 发送密钥

    是否可以将密钥发送到程序而无需SendMessage and PostMessage API 伪造输入的官方方法不涉及直接发送或发布 Windows 消息 相反 你应该打电话SendInput http msdn microsoft com
  • SpriteKit 是否支持精灵/纹理/形状的密集镶嵌,以便可以自由扭曲?

    例如 如果您有一张蹦床的图像 以及一个在上面跳跃的角色 然后您想要制作蹦床如何在中心弯曲的动画 为此 我必须获取位图并将其应用到密集细分的 OpenGL ES 网格 然后对其应用纹理 然后使网格变形 SpriteKit 是否支持此功能 或者
  • .htaccess 无法在我的 Ubuntu 14.04 发行版上运行

    我刚刚在 Ubuntu 14 04 发行版上配置了 LAMP 堆栈 并且想要设置 htaccess来提供网站服务 我按照教程进行操作https www digitalocean com community tutorials how to
  • 如何在Centos上安装特定版本的Docker?

    我尝试在Centos7上安装docker 1 8 2 该文档没有告诉任何有关版本控制的信息 有人可以帮助我吗 我试过 wget qO https get docker com sed s lxc docker lxc docker 1 8
  • 为什么我无法在场景构建器中选择 JFXTextfield 并添加它

    JFT文本区 and JFX按钮有效 但为什么不JFX文本字段 I have added foenix Library so I have got all the JFXTextField But i am not able to plac
  • Postgres 11 存储过程不返回结果

    在 Postgres 11 中 存储过程不打算返回结果集吗 因为当我们运行以下命令时 它说运行成功 但没有返回结果 CREATE OR REPLACE PROCEDURE test LANGUAGE sql AS SELECT from a
  • JavaScript:反转页面所有元素的颜色

    注意 我在我的问题中保留了最新版本的书签 它运行良好并且基于雅各布的答案 如果您正在寻找可使用的小书签 请使用该小书签 如果您只想在 chrome 上运行一些令人惊叹的东西 请参阅 leosok 的精彩答案 首先 抓住精彩RGBColor
  • iOS:MDM 与无线配置文件交付和配置之间的差异

    我正在寻找 iOS 世界上的设备管理解决方案 我发现了两种方法 移动设备管理 http www apple com ipad business it center deployment mdm html http www apple com
  • JSON.NET 无法反序列化包装的集合

    我有一个包装好的列表 如下所示 Serializable public class OrderManager IEnumerable