You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

根据ID参数获取JSON中LastModifiedDate字段的实现方案

问题

给定如下JSON数据及对应的C#实体类,需实现GetLatestModifiedData方法,传入ID参数后返回对应的LastModifiedDate字段值。示例:传入"101"返回"2022-04-04T17:30:15.8609796Z",传入"102"返回"2018-05-05T16:36:41.1106642Z"。

JSON数据

{
    "ProductImportData": {
        "ProductsToImport": [{
                "ImportMode": "Update",
                "DateInfo": {
                    "LastModifiedDate": "2022-04-04T17:30:15.8609796Z"
                },
                "Values": [{
                    "Name": "ID",
                    "ValuesByLocale": {
                        "en-US": "101"
                    }
                }]
            },
            {
                "ImportMode": "Update",
                "DateInfo": {
                    "LastModifiedDate": "2018-05-05T16:36:41.1106642Z"
                },
                "Values": [{
                    "Name": "ID",
                    "ValuesByLocale": {
                        "en-US": "102"
                    }
                }]
            }
        ]
    }
}

C#实体类

using Newtonsoft.Json;
using System.Collections.Generic;
using System;

public class DateInfo
{
    public DateTime LastModifiedDate { get; set; }
}

public class ProductImportData
{
    public List<ProductsToImport> ProductsToImport { get; set; }
}

public class ProductsToImport
{
    public string ImportMode { get; set; }
    public DateInfo DateInfo { get; set; }
    public List<Value> Values { get; set; }
}

public class Root
{
    public ProductImportData ProductImportData { get; set; }
}

public class Value
{
    public string Name { get; set; }
    public ValuesByLocale ValuesByLocale { get; set; }
}

public class ValuesByLocale
{
    [JsonProperty("en-US")]
    public string EnUS { get; set; }
}

解决方案

步骤1:反序列化JSON到实体类

先将JSON字符串反序列化为Root类型对象,这里依赖Newtonsoft.Json(Json.NET)库,确保项目已安装该NuGet包。

// 假设jsonString为你的JSON数据字符串
Root rootObject = JsonConvert.DeserializeObject<Root>(jsonString);

步骤2:实现GetLatestModifiedData方法

遍历ProductsToImport集合,定位到Values中名称为"ID"且EnUS值匹配传入参数的项,返回其DateInfo.LastModifiedDate。加入空值检查和未找到的处理逻辑。

public DateTime? GetLatestModifiedData(Root rootObject, string targetId)
{
    // 空值校验
    if (rootObject?.ProductImportData?.ProductsToImport == null)
        return null;

    // 查找匹配的产品项
    var matchingProduct = rootObject.ProductImportData.ProductsToImport
        .FirstOrDefault(product => 
            product.Values?.FirstOrDefault(v => v.Name == "ID")?.ValuesByLocale?.EnUS == targetId);

    // 返回对应日期,未找到则返回null
    return matchingProduct?.DateInfo?.LastModifiedDate;
}

调用示例

// 假设已完成反序列化得到rootObject
string targetId = "101";
DateTime? resultDate = GetLatestModifiedData(rootObject, targetId);

if (resultDate.HasValue)
{
    // 格式化输出为示例中的ISO 8601格式
    Console.WriteLine(resultDate.Value.ToString("yyyy-MM-ddTHH:mm:ss.fffffffZ"));
}
else
{
    Console.WriteLine("未找到匹配的ID");
}

优化建议(高频查询场景)

如果需要频繁根据ID查询,建议提前将数据转换为字典,提升查询效率:

var idToDateMap = rootObject.ProductImportData.ProductsToImport
    .Where(p => p.Values?.Any(v => v.Name == "ID") == true)
    .ToDictionary(
        p => p.Values.First(v => v.Name == "ID").ValuesByLocale.EnUS,
        p => p.DateInfo.LastModifiedDate
    );

// 查询时直接使用字典
if (idToDateMap.TryGetValue("101", out DateTime date))
{
    Console.WriteLine(date.ToString("yyyy-MM-ddTHH:mm:ss.fffffffZ"));
}

内容的提问来源于stack exchange,提问作者Edwin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 10:15:35