如何解决尝试在C#中反序列化复杂的json文件
我正在尝试在c#中反序列化json文件并使用键来打印每个值的值,但是对于列表中的json值,我无法打印所需的值。 Json文件:
{
"prod": {
"vpc_name": "vpc-us-east-1-it-prod","subnets": {
"application": [ "subnet-1234","subnet-1345" ],"data": [ "subnet-64t3","subnet-f321" ],"edge": [ "subnet-1ff3","subnet-134g" ]
}
},"dev": {
"vpc_name": "vpc-us-east-1-it-dev","subnets": {
"application": [
{ "subnet_id": "subnet-2345tf","az": "us-east-1a" },{ "subnet_id": "subnet-143f1","az": "us-east-1b" }
],"data": [
{ "subnet_id": "subnet-134f","az": "us-east-1b" },{ "subnet_id": "subnet-1324","az": "us-east-1a" }
],"edge": [
{ "subnet_id": "subnet-123434",{ "subnet_id": "subnet-123fg","az": "us-east-1b" }
]
}
}
}
C#代码
using System;
using System.Collections.Generic;
using System.IO;
using System.Text.Json;
namespace JsonDeserializer
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
string jsonString = File.ReadAllText(@"C:/Users/Stephen.Carvalho/source\repos/JsonDeserializer/JsonDeserializer/vpc_stack.json");
Rootobject vpcs = JsonSerializer.Deserialize<Rootobject>(jsonString);
Console.WriteLine(vpcs.dev.vpc_name);
Console.WriteLine(vpcs.dev.subnets.application);
}
}
public class Rootobject
{
public Prod prod { get; set; }
public Dev dev { get; set; }
}
public class Prod
{
public string vpc_name { get; set; }
public Subnets subnets { get; set; }
}
public class Subnets
{
public string[] application { get; set; }
public string[] data { get; set; }
public string[] edge { get; set; }
}
public class Dev
{
public string vpc_name { get; set; }
public Subnets1 subnets { get; set; }
}
public class Subnets1
{
public Application[] application { get; set; }
public Datum[] data { get; set; }
public Edge[] edge { get; set; }
}
public class Application
{
public string subnet_id { get; set; }
public string az0885b3b66d { get; set; }
public string az { get; set; }
}
public class Datum
{
public string subnet_id { get; set; }
public string az { get; set; }
}
public class Edge
{
public string subnet_id { get; set; }
public string az { get; set; }
}
}
输出
Hello World!
vpc-us-east-1-it-dev
JsonDeserializer.Application[]
我想使用prod.subnets打印应用程序子网列表,但不是获取返回的值,而是获取JsonDeserializer.Application []作为输出
解决方法
这是因为vpcs.dev.subnets.application
是Application
的数组。您可以先获取subnet_ids,然后将该阵列转换为字符串,从而打印应用程序子网的阵列。
之所以看到JsonDeserializer.Application[]
是因为打印对象本身。当您这样做时,将得到对象类型的名称,而不是其中的值。>
Console.WriteLine(string.Join(",",vpcs.dev.subnets.application.Select(x => x.subnet_id)));
Select
语句通过每个应用程序,并且仅返回subnet_id。只要有数组/列表,就可以使用select方法从列表中获取特定项,或者使用此方法创建新对象。
发生这种情况是因为您尝试在一行中打印一个数组,您可以尝试执行以下操作:
Array.ForEach(vpcs.dev.subnets.application,Console.WriteLine);
或将其解析为列表并打印
vpcs.dev.subnets.application.ToList().ForEach(i => Console.WriteLine(i.ToString()));
或者您也可以尝试在foreach中执行此操作:
foreach(var item in vpcs.dev.subnets.application)
{
Console.WriteLine(item.ToString());
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。