.NET json 序列化自定义格式
时间: 2023-07-23 22:15:16 浏览: 54
在 .NET 中,你可以使用 `Newtonsoft.Json` 库来进行 JSON 序列化和反序列化操作。以下是一个示例代码,演示了如何使用自定义格式进行序列化和反序列化:
```csharp
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using System;
using System.Collections.Generic;
// 自定义数据类
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public List<string> Hobbies { get; set; }
}
// 自定义序列化器
public class CustomSerializer : DefaultContractResolver
{
protected override JsonContract CreateContract(Type objectType)
{
if (objectType == typeof(List<string>))
{
return new JsonPrimitiveContract(typeof(string));
}
return base.CreateContract(objectType);
}
}
class Program
{
static void Main(string[] args)
{
// 自定义数据
var person = new Person
{
Name = "John",
Age = 30,
Hobbies = new List<string> { "reading", "painting", "coding" }
};
// 自定义格式的 JSON 序列化
var settings = new JsonSerializerSettings
{
ContractResolver = new CustomSerializer(),
Formatting = Formatting.Indented
};
var json = JsonConvert.SerializeObject(person, settings);
Console.WriteLine(json);
// 输出:{"Name":"John","Age":30,"Hobbies":"reading|painting|coding"}
// 反序列化
var deserializedPerson = JsonConvert.DeserializeObject<Person>(json);
Console.WriteLine($"{deserializedPerson.Name}, {deserializedPerson.Age}");
// 输出:John, 30
}
}
```
在上面的示例中,我们定义了一个 `Person` 类来表示自定义数据。然后,我们创建了一个 `CustomSerializer` 类来继承自 `DefaultContractResolver`,并重写了 `CreateContract` 方法,以使列表类型被当作字符串类型进行序列化。
在 `Main` 方法中,我们创建了一个 `Person` 对象,并使用 `JsonConvert.SerializeObject` 方法将其序列化为 JSON 字符串。我们使用 `JsonSerializerSettings` 来指定自定义的序列化器和格式化选项。最后,我们使用 `JsonConvert.DeserializeObject` 方法将 JSON 字符串反序列化为 `Person` 对象。
请注意,你需要在项目中安装 `Newtonsoft.Json` NuGet 包才能使用 `Newtonsoft.Json` 库。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)