C#为JSON序列化和反序列化创建一个.NET对象[重复]
Posted
技术标签:
【中文标题】C#为JSON序列化和反序列化创建一个.NET对象[重复]【英文标题】:C# Create a .NET object for JSON serialization and deserialization [duplicate] 【发布时间】:2016-09-10 00:12:45 【问题描述】:我正在用 C# 为我的 twitch 聊天机器人开发一个积分系统。我需要将用户列表及其点数和小时数保存到本地 .txt 文件中,如下所示:
用户:??? 用户名:??? 昵称:字符串 积分:整数 小时:整数 用户名:??? 昵称:字符串 积分:整数 小时:整数 用户名:??? 昵称:字符串 积分:整数 小时:整数我正在尝试创建一个 .NET 对象以序列化为 JSON 字符串并将其写入我的 .txt 文件,但我被困在这里。
我认为 users 需要是某种数组,但我该如何处理用户名?我认为 JSON 不支持自定义类型?
感谢您的宝贵时间, X3ntr
【问题讨论】:
一般来说,您对数据进行建模并编写类,然后遵循 Json 格式(您也可以采用正确格式的 Json 并创建为该数据建模的类)。 【参考方案1】:首先我们需要创建一个模型。该模型需要匹配 JSON 的结构。有几种方法可以创建此模型。
可能最好和最安全的方法是手动编写。如果您使用的是 vs2015,您也可以复制 json 并将其粘贴为类。
您可以在此处找到此选项:
另一种选择是使用http://json2csharp.com/ 之类的网站,您可以在此处粘贴 JSON,这也会为您的 JSON 生成类。请记住,这些生成器并非 100% 准确,因此您可能需要自己更改一些属性。
我们得到了模型,我们可以使用像 JSON.net 这样的库来反序列化我们的 JSON。网站上还有一些关于如何使用 JSON.net 的额外文档
var userList = JsonConvert.DeserializeObject<List<UserModel>>(users); //Users being the json as text.
请记住,如果您错过了模型中的某个属性,这并不总是会引发错误。因此,请确保所有属性都已正确序列化。
序列化与反序列化一样简单。
string json = JsonConvert.SerializeObject(model);
File.WriteAllText("C:\json.txt",json);
可选的是在编写 json 时添加编码。
File.WriteAllText("C:\json.txt",json,Encoding.UTF8);
【讨论】:
编辑 -> 特殊粘贴太棒了!不知道。【参考方案2】:我会试一试的。
首先我们需要为我们的用户创建一个模型:
public class User
public Guid Id get; set;
public string Username get; set;
public string NickName get; set;
public int Points get ;set;
public int Hours get; set;
然后在您的主要方法中,或者在您与用户打交道的任何地方:
List<User> users = new List<User>();
请注意,我添加了一个 Id 属性。即使您的用户名很可能是独一无二的,但拥有某种属性,其全部工作只是作为 Id 始终是一个好习惯。此属性在用户的整个生命周期中都不应更改。用户名可能有一天会改变,但 ID 将始终保持不变。
不管怎样,现在把你的列表变成 Json:
string myJsonString = JsonConvert.SerializeObject(users, Formatting.Indented);
瞧!您的用户列表现在位于一个整洁的 Json 字符串中。上面这行代码来自 JSON.NET,您可以将其作为a Nuget package 获取。完整的资格是 Newtonsoft.Json.JsonConvert。您几乎可以相信 JSON.NET 可以处理几乎所有您向它抛出的东西,尤其是对于像您将要向它抛出的简单 User 类。
希望这有助于您入门。
【讨论】:
以上是关于C#为JSON序列化和反序列化创建一个.NET对象[重复]的主要内容,如果未能解决你的问题,请参考以下文章
C# 使用Json.NET对数据进行序列化和反序列化 | c# json serialize and deserialize using json.net JsonConvert