首页 > 其他分享 >.net 将对象序列化成字符串,出现转义符问题

.net 将对象序列化成字符串,出现转义符问题

时间:2023-04-05 17:36:06浏览次数:42  
标签:Console string 转义 化成 json WriteLine new net

.net 将对象序列化成字符串,出现转义符问题

问题出现原因:

如果出现转义符,一般是因为进行了两次序列化才导致这样的情况的,也就是说,内层某个key的value已经序列化成字符串了,

外层再次序列化的时候,又对内层进行了第二次序列化,所以导致内层的属性或者说是键值对,出现了转义符。

解决办法:

内层的key-value中的value如果是一个对象,就先不要使用 string entityListJson = JsonConvert.SerializeObject(retrunEntitieList) 进行序列化,

而是直接使用没有做过转换的原对象进行赋值,或者 JArray jArray = JArray.FromObject(retrunEntitieList) 转换成json数组。

            //打印json内容到本地文件 
            List<RetrunEntity> retrunEntitieList = new List<RetrunEntity>();
            for (int i = 0; i < 2; i++)
            {
                RetrunEntity retrunEntityObj = new RetrunEntity
                {
                    bank_type = "type_" + i,
                    transaction_id = "id_" + i
                };
                retrunEntitieList.Add(retrunEntityObj);
            }
            //json数组
            JArray jArray = JArray.FromObject(retrunEntitieList);
            //json字符串
            string entityListJson = JsonConvert.SerializeObject(retrunEntitieList);

            Dictionary<string, object> map = new Dictionary<string, object>
            {
                ["Json"] = entityListJson,//json字符串赋值,最后的外层对象打印有转义符
                ["JArray"] = jArray,//json数组赋值,最后的外层对象打印不带转义符
                ["Entity"] = retrunEntitieList[0],//单个实体对象赋值,最后的外层对象打印不带转义符
                ["EntityList"] = retrunEntitieList,//多个实体对象赋值,最后的外层对象打印不带转义符
                ["templateMessage"] = "456",
                ["sign"] = "XZFZF"
            };
            //将字典类型序列化为json字符串
            string requestData = "[" + SerializeDictionaryToJsonString(map) + "]";
            Console.WriteLine(requestData);
            Console.WriteLine();
            var path = @"D:\用户目录\桌面\json打印内容.txt";
            WriteMessageToFile(path, requestData);

            var jobjectResult = new JObject
            {
                ["Json"] = entityListJson,//json字符串赋值,最后的外层对象打印有转义符
                ["JArray"] = jArray,//json数组赋值,最后的外层对象打印不带转义符
                ["Status"] = 1
            };
            string resultString = jobjectResult.ToString();
            Console.WriteLine(resultString);
            Console.WriteLine();
            
            WriteMessageToFile(path, resultString);
            Console.ReadKey();

            #region----反面教材----
            //打印出来的结果有转义符
            StringBuilder sb = new StringBuilder();
            StringWriter sw = new StringWriter(sb);
            JsonWriter writer = new JsonTextWriter(sw);
            writer.WriteStartObject();
            writer.WritePropertyName("Status");
            writer.WriteValue(1);
            writer.WritePropertyName("Goods");
            writer.WriteValue(jArray.ToString());
            writer.WriteEndObject();
            writer.Flush();
            Console.WriteLine(sb.ToString());
            Console.WriteLine();
            Console.WriteLine(entityListJson);
            Console.WriteLine();
            #endregion----反面教材----

 

        /// <summary>
        /// 输出指定信息到文本文件
        /// </summary>
        /// <param name="path">文本文件路径:D:\用户目录\桌面\json打印内容.txt</param>
        /// <param name="msg">输出信息</param>
        public static void WriteMessageToFile(string path, string msg)
        {
            try
            {
                ////读取文件
                //using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
                //{
                //    using (StreamReader sr = new StreamReader(fs,Encoding.Default))
                //    {
                //        //sr.ReadToEnd().Remove(0);
                //        //string content = sr.ReadToEnd();//这个就是文本内容
                //        //content = content.Remove(0);//清除内容
                //        Console.WriteLine(sr.ReadToEnd());
                //        sr.Close();
                //    }
                //    Console.ReadKey();
                //}

                //写入文件
                //FileMode.Create如果文件存在就是覆盖文件,FileMode.OpenOrCreate如果文件存在就是追加文件内容
                using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write))
                {
                    using (StreamWriter sw = new StreamWriter(fs))
                    {
                        sw.BaseStream.Seek(0, SeekOrigin.End);
                        sw.WriteLine("{0}\r\n", msg, DateTime.Now);
                        sw.Flush();
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

 

    public class RetrunEntity
    {
        public decimal payment_back { get; set; }
        public string bank_type { get; set; }
        public string transaction_id { get; set; }
        public string time_end { get; set; }
    }

 

 

翻译

搜索

复制

标签:Console,string,转义,化成,json,WriteLine,new,net
From: https://www.cnblogs.com/jankie1122/p/17289927.html

相关文章

  • 四、kubernetes-存储抽象
    1.先搭建nfs服务器2.每台节点都挂载nfs目录文件夹3.使用原生方式挂载的nfs数据,在pod删除后数据不会删除服务器原生方式挂载,将/usr/share/nginx/html挂载到nfs文件夹下apiVersion:apps/v1kind:Deploymentmetadata:labels:app:nginx-pv-demoname:nginx-pv-de......
  • 01. Jenkins - 安装说明(War / Kubernetes)
    CI/CD日常运维中常常听到CI/CD这个词,它其实包含整个研发生命周期的三个阶段:CI,Continuousintegration,持续集成CD,Continuousdelivery,持续交付CD,Continuousdeployment,持续部署大致的流程图如下:而对于Kubernete的CI/CD工具目前也有很多,比如Jenkins、GitlabCI以及......
  • [重读经典论文]SENet——ILSVRC收官之作
    1.前言SENet由Momenta公司,在论文《Squeeze-and-ExcitationNetworks》提出,核心是SEblock,它通过对特征通道间的相关性进行建模,把重要的特征进行强化来提升准确率。作者采用SENetblock和ResNeXt结合在ILSVRC2017(最后一届)的分类项目中拿到第一,在ImageNet数据集上将top-5error......
  • asp.net core 生成文件下载
    1publicIActionResultdown(intid,stringfilename)2{3stringpath=hostingEnvironment.WebRootPath+"/ContractFiles/"+id+"/"+filename;456varcontentType="APPLICA......
  • OPNET网络仿真分析-1.1.2、OPNET简介
    OPENT网络仿真分析(作者:栾鹏、陈玓玏)OPNET网络仿真分析-目录OPNET网络仿真分析-电子版1.1.2、OPNET简介OPNET公司起源于MIT(麻省理工学院),成立于1986年。1987年OPNET公司发布了其第一个商业化的网络性能仿真软件,提供了具有重要意义的网络性能优化工具,使得具有预测性的网络性能管理和......
  • OPNET网络仿真分析-1.1.1、网络仿真简介
    OPENT网络仿真分析(作者:栾鹏、陈玓玏)1.1.1、网络仿真简介1、网络仿真的目的:在建设网络,开展网络业务之前需要对配置的网络设备、所采用的网络技术、承载的网络业务等方面的投资进行综合分析和评估,提出性能价格比最优的解决方案。构建新网络,升级改造现有网络,或者测试新协议,都需要对......
  • OPNET网络仿真分析-1.6、OPNET软件使用
    OPENT网络仿真分析(作者:栾鹏、陈玓玏)1.6、OPNET软件使用1.6.1、菜单栏介绍在子网模块界面,OPNET菜单栏工具栏如图所示。第一部分:文件操作点击File,弹出如图1-9所示。(1)点击New,弹出新建内容窗口,会有多种创建内容选择。点击Open和Save以及SaveAs同样会有不同的文件格式类型。OPNET文件......
  • OPNET网络仿真分析-1.2、OPNET安装教程
    OPENT网络仿真分析(作者:栾鹏、陈玓玏)1.2、OPNET安装教程本书使用的OPNET安装配置环境如表1-8所示。第一部分:安装vs2010,设置vs环境变量本书使用以win764位安装OPNET14.5仿真软件。【1】安装vs2010,只需要安装c++语言(安装过程略)。我的安装目录为G:\vs2010【2】开始设置VC编译器的环......
  • [!] CDN: trunk URL couldn‘t be downloaded: https://cdn.jsdelivr.net/cocoa/
    热烈欢迎,请直接点击!!!进入博主AppStore主页,下载使用各个作品!!!注:博主将坚持每月上线一个新app!!!清华CocoaPods镜像源:CocoaPods镜像使用帮助CocoaPods是一个Cocoa和CocoaTouch框架的依赖管理器,具体原理和Homebrew有点类似,都是从GitHub下载索引,然后根据索引下载依赖的源......
  • ASP.NET Web API 中的参数绑定
    请考虑使用 ASP.NETCoreWebAPI。与ASP.NET4.xWebAPI的比,它具有以下优势:ASP.NETCore是一个开源的跨平台框架,用于在Windows、macOS和Linux上构建基于云的新式Web应用。ASP.NETCoreMVC控制器和WebAPI控制器是统一的。针对可测试性进行构建。能够在Win......