目前,当我尝试使用Newtonsoft.Json反序列化从第 3 方收到的 json 字符串(--> 我无法自己更改接收到的 json 字符串)时,我面临以下问题:
json 包含一个字典(以及我未在此处列出的其他一些条目):
"food": {
"Menu 1": "abc",
"Menu 2": "def"
}
Run Code Online (Sandbox Code Playgroud)
我创建了一个包含该属性的类(加上我在此处未列出的属性):
Dictionary<string, string> Food {get; set;}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,json 的反序列化效果很好。当食物空了时就会出现问题:
{
"food": [],
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,食物似乎不是字典而是数组。 这就是反序列化失败并出现以下错误的原因:
Newtonsoft.Json.JsonSerializationException:“无法将当前 JSON 数组(例如 [1,2,3])反序列化为类型 'System.Collections.Generic.Dictionary`2[System.String,System.String]',因为该类型需要JSON 对象(例如 {"name":"value"})以正确反序列化。要修复此错误,请将 JSON 更改为 JSON 对象(例如 {"name":"value"})或将反序列化类型更改为数组或实现集合接口(例如 ICollection、IList)的类型(例如可以从 JSON 数组反序列化的 List)。还可以将 JsonArrayAttribute 添加到该类型以强制其从 JSON 数组反序列化。路径“食物”。”
请问有人可以帮我解决这个问题吗?
编辑去 盐化代码:
public T DeserializeAPIResults<T>(string json)
{
JObject obj = JsonConvert.DeserializeObject<JObject>(json);
return obj.GetValue("canteen").ToObject<T>();
}
Run Code Online (Sandbox Code Playgroud)
编辑2 完整的json值:
{
"canteen": [
{
"name": "Canteen1",
"src": "a …Run Code Online (Sandbox Code Playgroud) 假设我们有以下功能:
def functionA(b, c):
def _innerFunction(b, c):
return b + c
return _innerFunction(b, c)
def _outerFunction(b, c):
return b + c
def functionB(b, c):
return _outerFunction(b, c)
Run Code Online (Sandbox Code Playgroud)
functionA并将functionB做同样的事情。_outerFunction全局可用,而_innerFunction仅适用于functionA. 嵌套函数对于数据隐藏和隐私很有用,但它们的内存效率如何?根据我的理解,_outerFunction只能加载一次,而其工作方式类似于“本地”变量,因此每次调用_innerFunction时都必须加载。functionA那是对的吗?