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对象[重复]的主要内容,如果未能解决你的问题,请参考以下文章

json对象的序列化和反序列化

C# 使用Json.NET对数据进行序列化和反序列化 | c# json serialize and deserialize using json.net JsonConvert

C#序列化和反序列化到底是啥意思?

C#中如何实现多个观测数据对象序列化和反序列化?

C# Json序列化和反序列化

.NET中JSON的序列化和反序列化的3种方式