gpt4 book ai didi

c# - 反序列化 JSON 字符串列表以找到正确的模型

转载 作者:行者123 更新时间:2023-11-30 14:05:28 26 4
gpt4 key购买 nike

这很烦人,我只需要运行一次这段代码。之后,所有的都将被删除(这是迁移代码)

我有一个 List<string> JSON 字符串。它们包含各种不同格式的 JSON 对象,看起来像这样:

{
"id": 123
}
{
"id": "7521b497-abb7-46b8-bddc-177a6fd9f974",
"folderId": 123
}
{
"folderId": 123
}

等等。我需要得到 123 ,可以在属性中 idfolderId .如果我只是这样做:

class IdModel {
public int Id { get; set; }
}

//inside a function
var model = JsonConvert.DeserializeObject<IdModel>(json);

当它到达第二个 JSON 时它会失败,因为 id是一个 GUID。相反,它需要寻找 FolderId ,这意味着我可以做这样的事情:

class IdModel {
public int Id { get; set; }
}

class FolderIdModel {
public int FolderId { get; set; }
}

//inside a function
int folderId;

try {
var model = JsonConvert.DeserializeObject<FolderIdModel>(json);
folderId = model.FolderId;
} catch {
var model = JsonConvert.DeserializeObject<IdModel>(json);
folderId = model.Id;
}

对于这种情况,这“很好”,但我可能有 10 个不同的 JSON 对象,它们看起来都不一样。 FolderId > Id ,因为我一直都知道 FolderId 是正确的,除非它没有 FolderId,在这种情况下它可能有一个 Id(如果 FolderId 或 Id 都不正确,应该会爆炸)。

我的问题是:是否有一种聪明的方法可以在不查看 JSON 的情况下反序列化为不同的模型?记住Id可以是 GUID 和整数,具体取决于 JSON 对象。

我知道这很糟糕,我很抱歉。

最佳答案

是的,您可以使用 dynamic 类型,它将匹配您的 Json 对象的结果,然后验证值类型是 Guid 还是 int 像这样:

int folderId;
var model = JsonConvert.DeserializeObject<dynamic>(json);
folderId = model.id != null && model.id is int ? model.id : model.folderId;

如果有更多可能的结果,您可以打破这个三元运算符并单独验证它们。

关于c# - 反序列化 JSON 字符串列表以找到正确的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58413663/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com