unity学习(22)——客户端与服务器合力完成注册功能(4)数据库化

单纯的账号密码这种非频繁读写,实现起来很简单的,游戏的属性信息到时候也许会比较麻烦。

思路:每次加入有新键值TryAdd,如果加入成功,直接重写账号密码文件即可。

C#JsonConvert.DeserializeObject反序列化与JsonConvert.SerializeObject序列化(一)-CSDN博客

在vs中->项目->NuGet,搜索安装Newtonsoft.Json。 

转化部分的代码如下:

if (r)
{
    Console.WriteLine("成功注册时,写入文件");
    StreamWriter file = new StreamWriter("login.txt");
    string json = JsonConvert.SerializeObject(this.accounts);
    Console.WriteLine("字典转json之后的内容:"+ json);
    file.Write(json);
    file.Close();
}

第一次注册结果:

第二次注册结果: 

写入过程的变量类型变化是dictionary->string->txt,写入应该是没有问题了 。

下面做一下初始化时候的读入,

在data函数中,账号信息由txt->string->(jobject-> ConcurrentDictionary)

读取所有账号信息,以及赋值给自定义字典的代码如下:

     private ConcurrentDictionary<string, AccountModel> accounts = data();
     private int d=1;
// private string o=data();
     //private ConcurrentDictionary<string, AccountModel> accounts = JsonConvert.DeserializeObject(o);
     public static ConcurrentDictionary<string, AccountModel> data()//这样好像就行了
 {
         Console.WriteLine("服务器启动时只执行一次!");//太好了,我需要的也是这种只执行一次的
         StreamReader file = new StreamReader("login.txt");
         string all = file.ReadToEnd();
         file.Close();
         Console.WriteLine(all);//id是有一个潜在问题的,但不允许重名,问题少很多
         //JsonConvert.Deserialize<Dictionary<string, object>>(jsonData);
         Console.WriteLine(JsonConvert.DeserializeObject(all));
         Console.WriteLine(JsonConvert.DeserializeObject(all).GetType());
         Console.WriteLine(JsonConvert.DeserializeObject(all).ToString());
         ConcurrentDictionary<string, AccountModel> results = JsonConvert.DeserializeObject<ConcurrentDictionary<string, AccountModel>>(JsonConvert.DeserializeObject(all).ToString());
         Console.WriteLine("上面的是转换后的object结果");
         Console.WriteLine(results);
         //ConcurrentDictionary<string, AccountModel> results = (ConcurrentDictionary)JsonConvert.DeserializeObject(all);
         //Dictionary<string, string> results = JsonConvert.DeserializeObject<Dictionary<string, string>>(parsed["moretests"].ToString());
         return results;
         //return JsonConvert.DeserializeObject(all);
     }

最后亲测,关闭服务器后,再次启动服务器,之前注册的账号可以一直保存在login.txt中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/395290.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

15-55V输入自动升降压 光伏MPPT自动跟踪充电方案 大功率300瓦

1.MPPT原理--简介 MPPT&#xff0c;全称为Maximum Power Point Tracking&#xff0c;即最大功点跟踪&#xff0c;它是一种通过调节电气模块的工作状态&#xff0c;使光伏板能够输出更多电能的电气系统能够将太阳能电池板发出的直流电有效地贮存在蓄电池中&#xff0c;可有效地…

0205-2-数据链路层

第 3 章 数据链路层 使用点对点信道的数据链路层 数据链路和帧 数据链路层使用的信道主要有以下两种类型&#xff1a; 点对点信道。这种信道使用一对一的点对点通信方式。广播信道。这种信道使用一对多的广播通信方式&#xff0c;因此过程比较复杂。广播信道上连接的主机很多…

程序员金三银四跳槽指南:时间线经典面试16问

祝大家成功上岸&#xff0c;升职加薪&#xff0c;冲鸭 &#x1f389; 金三银四 今天复工&#xff0c;就要开始准备啦&#x1f4bc;✨ 把握好打工人跳槽的金三银四&#xff0c;获得满意的新工作 &#x1f389; 时间线 年后跳槽时间线&#xff0c;过完年刚好开始准备&#xf…

COMSOL Multiphysics在超材料与超表面仿真中的应用

随着科技的飞速发展&#xff0c;超材料和超表面作为新兴研究领域&#xff0c;吸引了广泛关注。它们通过人工设计的结构&#xff0c;能够在特定条件下表现出特殊的物理性质&#xff0c;为光电子领域带来革命性的变革。COMSOL Multiphysics作为一款强大的多物理场仿真软件&#x…

vue 实现docx文件在线预览

预览请求步骤&#xff1a; 准备一个需要预览的文件地址【如:https://usdoc.cn/vw/文件模板.docx】GET 参数到请求地址将拼接好的地址放在浏览器中&#xff0c;开始预览 请求地址&#xff1a;https://vw.usdoc.cn/ 请求方式&#xff1a;GET 请求参数: 字段名称字段类型必填参数…

WordPress主题YIA在广告位添加图片广告时下方有空白怎么办?

YIA主题设置中默认有4个广告位&#xff0c;而侧边栏的广告位由站长自行添加。boke112百科在这些广告位添加图片广告后发现图片下方有空白&#xff0c;导致下方的两个角没有变圆角&#xff0c;看起来也有点不好看。具体如下图所示&#xff1a; 其实&#xff0c;这个问题就是典型…

Spring Security基础学习

一、SpringSecurity框架简介 二、SpringSecurity入门案例 三、SpringSecurity Web权限方案 四、SpringSecurity微服务权限方案 五、SpringSecurity原理总结

Model / View结构

红色部分是可以直接使用的。 QFileSystemModel; QFileSystemModel的使用&#xff1a; 头文件&#xff1a; QFileSystemModel* model nullptr; cpp文件&#xff1a; model new QFileSystemModel; model->setRootPath(QDir::currentPath()); ui->listView->setModel…

微信小程序:实现微信小程序应用首页开发 (本地生活首页)

文章目录 小程序应用页面开发1、创建项目并配置项目目录结构配置导航栏效果三、配置 tabBar 效果四、轮播图实现4.1 创建轮播图数据容器4.2 定义一个请求轮播图数据的接口4.3 页面加载调用 数据请求接口 五、九宫格实现5.1 获取九宫格数据5.2 结构和样式的完善六、图片布局实现…

普中51单片机学习(九)

蜂鸣器 蜂鸣器简介 在单片机应用的设计上&#xff0c;很多方案都会用到蜂鸣器&#xff0c;大部分都是使用蜂鸣器来做提示或报警&#xff0c;比如按键按下、开始工作、工作结束或是故障等等。改变单片机引脚输出波形的频率&#xff0c;就可以调整控制蜂鸣器音调&#xff0c;产…

Qt的基本操作

文章目录 1. Qt Hello World 程序1.1 通过图形化界面的方式1.2 通过代码的方式实现 2. Qt 的编码问题3. 使用输入框实现hello world4. 使用按钮实现hello world5. Qt 编程注意事项6. 查询文档的方式7. 认识Qt坐标系 1. Qt Hello World 程序 1.1 通过图形化界面的方式 我们先讲…

Autosar --- CAN Driver标准解读

前言 本文是对Autosar文档的翻译与解读&#xff0c;通过对规范的理解&#xff0c;加上实际的应用来一一对应&#xff0c;方便大家更好的理解。 注意&#xff1a;本文并非完全的按照【AUTOSAR_SWS_CANDriver.pdf】来进行翻译的。文章内容的标题与【AUTOSAR_SWS_CANDriver.pdf】保…

记录setData报错TypeError: [object Array] is not a function

小程序调用setData控制台显示报错.但是功能正常 同样的各个地方调setData都报错,经过一轮排除法后发现是自定义组件写法有问题 修改正确之后就没问题了

精品jsp+ssm健身器材管理系统-教练开发与设计

《[含文档PPT源码等]精品jspssm健身管理系统开发与设计[包运行成功]》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 使用技术&#xff1a; 开发语言&#xff1a;Java 框架&#xff1a;ssm 技术&#xff1a;JSP JDK版本&…

VUE3 中导入VISO 图形

微软的VISO是一个功能强大的图形设计工具&#xff0c;它能够绘制流程图&#xff0c;P&ID&#xff0c;UML 类图等工程设计中常用的图形。它要比其它图形设计软件要简单许多。以后我的博文中将更多地使用VISO 来绘制图形。之前我一直使用的是corelDraw。 VISO 已经在工程设计…

AbstractQueuedSynchronizer

重要类 Node Node中的属性&#xff1a;prev next 重要方法 这个方法主要有两种实现 一个是公平 一个是非公平 公平&#xff1a; /*** Fair version of tryAcquire. Dont grant access unless* recursive call or no waiters or is first.*/protected final boolean tryAcq…

IOC理解总结

IOC 控制反转&#xff08;Inversion of Control&#xff0c;缩写为IoC&#xff09;&#xff0c;是面向对象编程中的一种设计原则&#xff0c;可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入&#xff08;Dependency Injection&#xff0c;简称DI&#xff09…

[深度学习] 卷积神经网络“卷“在哪里?

​ &#x1f308; 博客个人主页&#xff1a;Chris在Coding &#x1f3a5; 本文所属专栏&#xff1a;[深度学习] ❤️ 热门学习专栏&#xff1a;[Linux学习] ⏰ 我们仍在旅途 目录 1.卷积的定义 2.卷积的"卷"在哪里 3.什么又是卷积神…

⭐北邮复试刷题589. N 叉树的前序遍历__DFS (力扣每日一题)

589. N 叉树的前序遍历 给定一个 n 叉树的根节点 root &#xff0c;返回 其节点值的 前序遍历 。 n 叉树 在输入中按层序遍历进行序列化表示&#xff0c;每组子节点由空值 null 分隔&#xff08;请参见示例&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [1,null,…

【干货分享】测试开发必须要知道的Python面试题!

互联网寒冬&#xff0c;大家过得还好吗&#xff1f;年终奖发了多少&#xff1f; 最近感觉不少朋友都在刷 leetcode 了&#xff0c;年后打算看机会的&#xff0c;应该都蠢蠢欲动了吧。 我这里有一份精选的python面试题&#xff0c;测试开发方向的&#xff0c;由我和同行们在实…