c#从现有的对象数组创建一个新列表[关闭]

Posted

技术标签:

【中文标题】c#从现有的对象数组创建一个新列表[关闭]【英文标题】:c# create a new list from existing array of objects [closed] 【发布时间】:2022-01-05 23:16:28 【问题描述】:

我有以下对象数组。

"result": [
    
        “maxTry: 17,
        "minTry”: 10,
        "details": [
            
                “firstName”: “Sam”,
            ,
            
                "firstName”: ”Julio”,
            
        ],
        "aggr": [
            “Abc”,
        ],
        "zone": “D3”
    ,
    
        "aggr": [
            "Abc",
        ],
        "zone": “C3”
    ,
    
        "aggr": [
            "Abc",
        ],
        "zone": “B2”
    ,
    
        "aggr": [
            "Abc",
        ],
        "zone": “T1”
    ,
]

我想从上述对象中创建一个新列表。新列表将首先检查对象中是否存在maxTryminTry 节点。只有当maxTryminTry 都不存在于一个对象中时,才将zone 添加到新的列表数组中。新列表将如下所示。

["C3", "B2", "T1"]

【问题讨论】:

反序列化 json 并循环通过集合并在循环中使用 if 和 else 编写逻辑。 【参考方案1】:

    定义JSON 对象的结构。

    JSON字符串反序列化为对象。

    按您的条件过滤。

    输出结果。

可以将record的定义替换为class,如果你的C#版本不是很新,代码如下:

using System;
using System.Linq;
using System.Text.Json;

class Program

    public record JsonObject(Result[] Result);
    public record Detail(string FirstName);
    public record Result(int? MaxTry, int? MinTry, Detail[] Details, string[] Aggr, string Zone);

    public static void Main(string[] _)
    
        var option = new JsonSerializerOptions  AllowTrailingCommas = true, PropertyNameCaseInsensitive = true ;
        var jsonObject = JsonSerializer.Deserialize<JsonObject>(Json, option);
        var newList = jsonObject.Result.Where(x => !x.MaxTry.HasValue && !x.MinTry.HasValue).Select(x => x.Zone).ToList();
        Console.WriteLine(string.Join(" ", newList));
    

    private static string Json = @"""result"": [
    
        ""maxTry"": 17,
        ""minTry"": 10,
        ""details"": [
            
                ""firstName"": ""Sam"",
            ,
            
                ""firstName"": ""Julio"",
            
        ],
        ""aggr"": [
            ""Abc"",
        ],
        ""zone"": ""D3""
    ,
    
        ""aggr"": [
            ""Abc"",
        ],
        ""zone"": ""C3""
    ,
    
        ""aggr"": [
            ""Abc"",
        ],
        ""zone"": ""B2""
    ,
    
        ""aggr"": [
            ""Abc"",
        ],
        ""zone"": ""T1""
    ,
]";


【讨论】:

以上是关于c#从现有的对象数组创建一个新列表[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在 CSV 文件中写入 C# 对象列表 [关闭]

从现有的层次结构创建不可变的集合结构

通过数组创建新对象时的C#增量

在对象中创建一个具有不同数组元素的新数组[关闭]

在 C# 中将对象数组转换为浮点数组 [关闭]

如何在 C# 中删除(或取消)泛型数组列表中的对象? [复制]