C#: Json序列化和反序列化,集合为什么多出来一些元素?

2023-11-10

如下面的例子,很容易看出问题:

如果类本身的无参构造函数, 就添加了一些元素,序列化,再反序列化,会导致元素增加。

如果要避免,必须添加:

new JsonSerializerSettings() { ObjectCreationHandling = ObjectCreationHandling.Replace }

using Newtonsoft.Json;
using System;
using System.Collections.Generic;

class Program3
{
    static void Main(string[] args)
    {
        Product product = new Product();
        Console.WriteLine("Orginal Count:{0}", product.ListCustomer.Count);
        string json = JsonConvert.SerializeObject(product);  //序列化
        Product result1 = JsonConvert.DeserializeObject<Product>(json);
        Console.WriteLine("Result Count:{0}", result1.ListCustomer.Count);
        Product result2 = JsonConvert.DeserializeObject<Product>(json,
                    new JsonSerializerSettings() { ObjectCreationHandling = ObjectCreationHandling.Replace });
        Console.WriteLine("Result2 Count:{0}", result2.ListCustomer.Count);
        Console.WriteLine("--------------------------------");
        P2 p = new P2();
        p.ListCustomer = new List<int>();
        p.ListCustomer.AddRange(new int[]{ 1,2,3,4 });
        Console.WriteLine("Orginal Count:{0}", p.ListCustomer.Count);
        string json2 = JsonConvert.SerializeObject(p);  //序列化
        P2 p2Result = JsonConvert.DeserializeObject<P2>(json2);
        Console.WriteLine("Result Count:{0}", p2Result.ListCustomer.Count);

        Console.WriteLine("END");
        Console.Read();
    }

    public class Product
    {
        public Product()
        {
            ListCustomer = new List<int> { 1, 2, 3, 4 };
        }
        public List<int> ListCustomer { get; set; }
    }

    public class P2
    {
        public List<int> ListCustomer { get; set; }
    }
}

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

C#: Json序列化和反序列化,集合为什么多出来一些元素? 的相关文章

随机推荐

  • android开发收集的第三方框架和库

    主要介绍一下开发中会采用的库第三方框架和库 Retrofit 一句话介绍 Retrofit是一款类型安全的网络框架 基于HTTP协议 服务于Android和java语言 官网地址 http square github io retrofit
  • 眺望数据应用新态势|第八届腾讯云Techo TVP开发者峰会圆满落幕

    引言 在数据驱动的时代 如何有效地利用大数据已经成为了各个行业的重要课题 而随着云计算 人工智能等新兴技术的蓬勃发展 数据技术也随之不断生长并呈现出新的趋势与特点 企业该如何把握数据技术的新脉络 从而洞察数据背后的价值 2023 年 8 月
  • form+html+插件,jquery表单插件form使用方法详解

    传统的表单提交 都是页面跳转的形式 但是现在更流行ajax提交 那么如果希望有表单提交的简便 也有ajax的效果 有什么解决办法吗 怎么使用 两种使用方式 第一种方式Title 使用ajaxForm function myForm ajax
  • pycharm安装 pandas 库时出现 error occurred when installing package “pandas“以及解决办法

    在pycharm中的File gt Settings gt Project pythonProject gt Python Interpreter 然后找到 那里添加库 但是却出现error occurred when installing
  • 基于机器学习的安全数据集

    为了更好的帮助大家从事安全领域机器学习和深度学习 AI 安全 相关的研究 这篇文章将分享安全相关的数据集供大家下载和实验 包括恶意URL 流量分析 域名检测 恶意软件 图像分类 垃圾邮件等 也欢迎大家留言推荐数据集供我补充 这是作者的系列网
  • 2023上半年系统分析师下午案例分析真题及答案解析

    真题1 阅读以下关于软件系统分析与建模的叙述 在纸上回答问题1至3 说明 某软件公司拟开发一套汽车租赁系统 科学安全和方便的管理租赁公司的各项业务 提高公司效率 提升利率 注册用户在使用系统镜像车辆预约时需执行以下操作 a 用户登录系统 b
  • SSH常用参数

    SSH常用参数 ssh o ConnectTimeout 3 o ConnectionAttempts 5 o PasswordAuthentication no o StrictHostKeyChecking no ip command
  • Odoo16 开发 VSCode环境搭建

    Win10 Odoo 开发环境搭建 准备 Win10 VScode Python 3 10 8 PostgreSQL 14 创建 Odoo 根目录 如 D odoo 获取 Odoo 源码 从 gitee 加速下载 16 0 分支到 D od
  • Linux从图形界面切换到文本界面快捷键不好用的解决方法

    我们在正常情况下切换虚拟终端只要用组合键 Ctrl Alt Fn 这个n就是你要切换的虚拟终端的号 然后可以再按Ctrl Alt F7回到图形界面 但是在vmware中这个办法经常不奏效 原因大家应该知道的 就是在vmware下默认按住 C
  • 品读 Linux 0.11 核心代码

    https github com sunym1993 flash linux0 11 talk
  • node.js和npm的关系

    一 npm是什么 当一个网站依赖的js代码越来越多 程序员发现这是一件很麻烦的事情 去 jQuery 官网下载 jQuery 去 BootStrap 官网下载 BootStrap 去 Underscore 官网下载 Underscore 有
  • ETL入门教程

    来源 我是码农 转载请保留出处和链接 本文链接 http www 54manong com id 1214 1 ETL详解 1 1 ETL https www cnblogs com yjd hycf space p 7772722 htm
  • Jmeter 自动化性能测试常见问题汇总(建议收藏)

    一 request 请求超时设置 timeout 超时时间是可以手动设置的 新建一个 http 请求 在 高级 设置中找到 超时 设置 设置连接 响应时间为2000ms 1 请求连接超时 连不上服务器 现象 Jmeter表现形式为 前面几个
  • 预览窗格无法预览文件_如何在Windows 10上显示文件资源管理器的预览窗格

    预览窗格无法预览文件 It s easy to preview files without opening them in Windows 10 thanks to the Preview Pane feature in File Expl
  • Python 复制和移动文件:shutil

    用 Python 来进行文件的复制和移动操作 需要利用 Python 的标准库 shutil 程序实现 一 复制文件 复制文件 shutil copyfile file old jpg file new jpg 只能对文件进行操作 shut
  • 使用函数输出指定范围内的Fibonacci数 (20 分)

    使用函数输出指定范围内的Fibonacci数 20 分 本题要求实现一个计算Fibonacci数的简单函数 并利用其实现另一个函数 输出两正整数m和n 0
  • python 合并内容相同单元格

    客户这边 其中有一个如同上图所示的 sheet 然而需求是 需要将这张表第一列 一级部 数据相同内容做合并单元格处理 结果如下 代码分享如下 from openpyxl import load workbook 合并单元格 result f
  • openai账号创建教程-openai注册问题大全

    openai注册页面打不开 遇到openai注册页面打不开 可以用以下解决方法 检查网络连接 如果您的网络连接不稳定或者有问题 可能会导致访问网站异常 请尝试使用其他设备或连接其他网络 看是否能够打开OpenAI注册页面 清除浏览器缓存和C
  • nginx的proxy_pass路径转发规则最后带/问题

    一 location匹配路径末尾没有 location sta proxy pass http 192 168 1 1 sta 外面访问 http 外网IP sta sta1 html相当于访问 http 192 168 1 1 sta s
  • C#: Json序列化和反序列化,集合为什么多出来一些元素?

    如下面的例子 很容易看出问题 如果类本身的无参构造函数 就添加了一些元素 序列化 再反序列化 会导致元素增加 如果要避免 必须添加 new JsonSerializerSettings ObjectCreationHandling Obje