无法在 C# 中读取 Json 对象
Posted
技术标签:
【中文标题】无法在 C# 中读取 Json 对象【英文标题】:Not able to read Json Object in c# 【发布时间】:2019-12-14 13:11:26 【问题描述】:我正在尝试解析 JSON 对象,如下所示,其中标头对象将是一个随机的字母数字。此外,有时 JSON 可能只包含一个对象。
"48ce0e9a-ee27-4e7b-93a5-4f219974f62c":
"preview":
"FRONT": "https://123avb.jpg",
"INSIDE_TOP": "https://456ihn.jpg",
"INSIDE_BOTTOM": "https://987ung.jpg",
"BACK": "https://ikh980.jpg"
,
"print":
"primary": "https://iifuer.pdf",
"secondary": "https://09e491.pdf"
,
"d767e1a6-7afe-4d17-85f7-d512a0ca0b14":
"preview":
"FRONT": "https://0ff7cc7.jpg",
"BACK": "https://64e7a8.jpg"
,
"print":
"primary": "https://73fbdc.pdf"
我为这些对象创建了类:
namespace FulfillmentModel
public class Baseclass
public G1 G1 get; set;
public Env Env1 get; set;
public class Preview
[JsonProperty("FRONT")]
public string FRONT get; set;
[JsonProperty("INSIDE_TOP")]
public string INSIDE_TOP get; set;
[JsonProperty("INSIDE_BOTTOM")]
public string INSIDE_BOTTOM get; set;
[JsonProperty("BACK")]
public string BACK get; set;
public class Print
[JsonProperty("primary")]
public string primary get; set;
[JsonProperty("secondary")]
public string secondary get; set;
public class G1
public Preview preview get; set;
public Print print get; set;
public class Preview2
public string FRONT get; set;
public string BACK get; set;
public class Print2
public string primary get; set;
public class Env
public Preview2 preview get; set;
public Print2 print get; set;
我正在从 API 读取 JSON 对象。
我正在使用以下代码将其转换为BaseClass
:
string Jsontring= response.Content.ReadAsStringAsync().Result;
var verificationResult = JsonConvert.DeserializeObject<Baseclass>(Jsontring);
但BaseClass
中的对象为空。
我不确定我做错了什么。你能帮忙吗?
【问题讨论】:
【参考方案1】:在您的 JSON 中,最外面的对象中有键 48ce0e9a-ee27-4e7b-93a5-4f219974f62c
和 d767e1a6-7afe-4d17-85f7-d512a0ca0b14
。但是这些键不存在于您要反序列化到的 Baseclass
模型类中,其中包含 G1
和 Env
属性。您可以使用[JsonProperty]
属性标记这些属性,但由于您说这些键是随机的,处理它的更好方法是反序列化为Dictionary<string, G1>
。 (如果您确定字母数字键始终代表 GUID,您也可以使用 Dictionary<Guid, G1>
)。
var verificationResult = JsonConvert.DeserializeObject<Dictionary<string, G1>>(Jsontring);
现在verificationResult
将包含一个字典,其中的键是来自 JSON 的随机键。每个键对应的值将是一个G1
对象,其中填充了Preview
和Print
对象。
这里是演示小提琴:https://dotnetfiddle.net/kzGihd
【讨论】:
Dictionary<Guid, G1>
会更好。
@PMExtra 也许。 OP没有说钥匙是Guids(尽管它们看起来确实是);只是它们是“随机字母数字”。鉴于宽松的 goosey 规范,字符串键更安全。【参考方案2】:
您是否尝试在异步函数之前添加等待?
等待响应.Content.ReadAsStringAsync()
【讨论】:
以上是关于无法在 C# 中读取 Json 对象的主要内容,如果未能解决你的问题,请参考以下文章
我想在c#中使用foreach循环一一读取具有特定json对象数组的json文件数据
使用 C# 到 JavaScript 的 UWP WebView 中 JSON 的问题无法正确读取