如何允许 JObject 的可配置反序列化?
How to allow configurable deserialization of JObject?
在 .NET Core 控制台应用程序中,我正在调用 returns JSON 的 REST API。我将 Newtonsoft.Json.Linq.JObject
用于 deserialization/retrieval 值,如下所示:
string responseJson = await Utils.GetJsonFromApi(apiEndpoint);
dynamic jObject = new Newtonsoft.Json.Linq.JObject();
jObject = NewtonSoft.Json.JsonConvert.DeserializeObject(responseJson);
foreach (var car in jObject.items)
{
string carId = car.id.ToString();
}
如果 API 开发人员将数组变量 items
更改为 list
或将变量 id
更改为 code
,我将不得不更新我的代码和 recompile/republish.
是否可以像这样以某种方式利用应用程序设置:
"carAPI":{
"uri": "someuri",
"itemsArrayVariable": "items",
"carIdVariable": "id"
}
并在我的 API 客户端中使用这些设置,如下所示:
foreach (var car in jObject.itemsArrayVariable)
{
string carId = car.carIdVariable.ToString();
}
反序列化为 Dictionary<string, JToken>
并以递归方式深入研究您的数据。其他问答中记录了如何执行此操作。
但你不应该这样做,它会使你的代码无法维护。 API 开发人员不应进行此类重大更改,您也不应准备代码以防万一他们这样做。这就是 API 版本控制的目的。
如果他们要将数据移动到 JSON 中更深或更高的级别,则此解决方案也不会起作用,依此类推。无论如何你都必须重新编译,他们应该在另一个端点上做这样的改变,让老客户继续工作。
在 .NET Core 控制台应用程序中,我正在调用 returns JSON 的 REST API。我将 Newtonsoft.Json.Linq.JObject
用于 deserialization/retrieval 值,如下所示:
string responseJson = await Utils.GetJsonFromApi(apiEndpoint);
dynamic jObject = new Newtonsoft.Json.Linq.JObject();
jObject = NewtonSoft.Json.JsonConvert.DeserializeObject(responseJson);
foreach (var car in jObject.items)
{
string carId = car.id.ToString();
}
如果 API 开发人员将数组变量 items
更改为 list
或将变量 id
更改为 code
,我将不得不更新我的代码和 recompile/republish.
是否可以像这样以某种方式利用应用程序设置:
"carAPI":{
"uri": "someuri",
"itemsArrayVariable": "items",
"carIdVariable": "id"
}
并在我的 API 客户端中使用这些设置,如下所示:
foreach (var car in jObject.itemsArrayVariable)
{
string carId = car.carIdVariable.ToString();
}
反序列化为 Dictionary<string, JToken>
并以递归方式深入研究您的数据。其他问答中记录了如何执行此操作。
但你不应该这样做,它会使你的代码无法维护。 API 开发人员不应进行此类重大更改,您也不应准备代码以防万一他们这样做。这就是 API 版本控制的目的。
如果他们要将数据移动到 JSON 中更深或更高的级别,则此解决方案也不会起作用,依此类推。无论如何你都必须重新编译,他们应该在另一个端点上做这样的改变,让老客户继续工作。