📅  最后修改于: 2023-12-03 15:13:53.587000             🧑  作者: Mango
在 C# 中,将字典对象转换为 JSON 格式是一项很常见的任务。JSON 是一种轻量级的数据交换格式,在 Web 应用和服务中得到了广泛应用,因为它易于阅读、编写和解析。
C# 提供了多种方法将字典对象转换为 JSON 格式,其中最流行的是使用 Newtonsoft.Json
包。下面是一个示例:
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
Dictionary<string, object> dict = new Dictionary<string, object>()
{
{ "name", "John" },
{ "age", 30 },
{ "isMarried", true },
{ "hobbies", new string[] { "reading", "gaming", "traveling" } }
};
string json = JsonConvert.SerializeObject(dict, Formatting.Indented);
Console.WriteLine(json);
该示例创建了一个 Dictionary<string, object>
对象,并使用 JsonConvert.SerializeObject()
方法将其转换为 JSON 字符串。Formatting.Indented
参数确保输出的 JSON 带有缩进和换行,使得其更易于阅读。
输出结果如下所示:
{
"name": "John",
"age": 30,
"isMarried": true,
"hobbies": [
"reading",
"gaming",
"traveling"
]
}
有时候,我们需要自定义字典对象的序列化方式,比如只保留字典中的某些键值对、更改键名、更改值类型等等。这时候,我们可以自定义一个类并实现 JsonConverter
接口。
以下是一个示例:
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
class CustomDictionaryConverter : JsonConverter<Dictionary<string, object>>
{
public override void WriteJson(JsonWriter writer, Dictionary<string, object> value, JsonSerializer serializer)
{
writer.WriteStartObject();
foreach (KeyValuePair<string, object> kvp in value.Where(kvp => kvp.Key != "age")) // exclude 'age' key
{
writer.WritePropertyName(kvp.Key == "name" ? "fullname" : kvp.Key); // rename 'name' key to 'fullname'
serializer.Serialize(writer, kvp.Value);
}
writer.WritePropertyName("birthyear");
writer.WriteValue(DateTime.Now.Year - Convert.ToInt32(value["age"])); // calculate 'birthyear' from 'age' value
writer.WriteEndObject();
}
public override Dictionary<string, object> ReadJson(JsonReader reader, Type objectType, Dictionary<string, object> existingValue, bool hasExistingValue, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
Dictionary<string, object> dict = new Dictionary<string, object>()
{
{ "name", "John" },
{ "age", 30 },
{ "isMarried", true },
{ "hobbies", new string[] { "reading", "gaming", "traveling" } }
};
string json = JsonConvert.SerializeObject(dict, new CustomDictionaryConverter());
Console.WriteLine(json);
该示例定义了一个名为 CustomDictionaryConverter
的自定义序列化器,它将字典对象序列化成一个带有自定义键名和值类型的 JSON 字符串。在该示例中,我们将 name
键重命名为 fullname
,排除了 age
键,并计算出一个新的 birthyear
值。
输出结果如下所示:
{
"fullname": "John",
"isMarried": true,
"hobbies": [
"reading",
"gaming",
"traveling"
],
"birthyear": 1991
}
在 C# 中,将字典对象转换为 JSON 格式是一个常见的任务,可以使用 Newtonsoft.Json
包轻松地实现此操作。您还可以自定义序列化器来满足更复杂的需求。该过程在大多数 Web 应用和服务中都是必不可少的。