• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
netcore_vue
博客园    首页    新随笔    联系   管理    订阅  订阅

如果 JSON 数据是一个数组,如何将其更改为对象,或者将反序列化的类型更改为可以从 JSON 数组中反序列化的类型,比如 List<T>

如果你的 JSON 数据是一个数组,你可以将其更改为对象,或者将反序列化的类型更改为可以从 JSON 数组中反序列化的类型,比如 `List<T>`。这里提供两种方法来处理这种情况。

方法一:更改 JSON 数据为对象
如果你希望将 JSON 数组更改为对象,你需要在 JSON 数据的外部添加一个大括号 `{}`,将数组包装成一个对象。例如,将以下 JSON 数组:

```json
[
{
"name": "John",
"age": 30,
"email": "john@example.com"
},
{
"name": "Jane",
"age": 25,
"email": "jane@example.com"
}
]
```

更改为以下形式的 JSON 对象:

```json
{
"users": [
{
"name": "John",
"age": 30,
"email": "john@example.com"
},
{
"name": "Jane",
"age": 25,
"email": "jane@example.com"
}
]
}
```

然后,你可以创建一个包含 `users` 属性的类来反序列化该 JSON 对象:

```csharp
public class RootObject
{
public List<User> Users { get; set; }
}

public class User
{
public string Name { get; set; }
public int Age { get; set; }
public string Email { get; set; }
}
```

使用 `JsonConvert.DeserializeObject` 方法将 JSON 对象反序列化为 `RootObject` 类的实例:

```csharp
string json = // JSON 数据
RootObject rootObject = JsonConvert.DeserializeObject<RootObject>(json);
List<User> users = rootObject.Users;
```

现在,你可以通过 `users` 变量访问反序列化后的用户对象列表。

方法二:更改反序列化的类型为 `List<T>`
如果你希望将 JSON 数组直接反序列化为 `List<T>`,而不是一个对象,你可以将反序列化的类型更改为 `List<T>`。在这种情况下,你不需要更改 JSON 数据的结构。例如,对于以下 JSON 数组:

```json
[
{
"name": "John",
"age": 30,
"email": "john@example.com"
},
{
"name": "Jane",
"age": 25,
"email": "jane@example.com"
}
]
```

你可以直接将其反序列化为 `List<User>`:

```csharp
string json = // JSON 数据
List<User> users = JsonConvert.DeserializeObject<List<User>>(json);
```

现在,`users` 变量将包含反序列化后的用户对象列表。

// 发送 GET 请求
HttpResponseMessage response = await client.GetAsync("http://localhost:9999/api/cap_userroles/get/users");

// 检查响应是否成功
response.EnsureSuccessStatusCode();

// 读取响应内容
string responseBody = await response.Content.ReadAsStringAsync();

var users = JsonSerializer.Deserialize<List<SmartPart_AddOrModifyUserEto>>(responseBody);

// 处理响应数据
Console.WriteLine(responseBody);

posted @ 2023-08-16 09:56  梦想代码-0431  阅读(407)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3