gpt4 book ai didi

c# - 使用 C# 对 JSON 进行反序列化的问题

转载 作者:行者123 更新时间:2023-11-30 23:08:06 26 4
gpt4 key购买 nike

我查看了一个又一个示例,但我的尝试都没有奏效。

我正在尝试反序列化此 JSON 返回:

{
"status": "success",
"data": {
"result": "match",
"id_user": 26564,
"dob_match": null,
"first_name_match": null,
"last_name_match": null
},
"code": 200
}

这是我的 JSON 对象类声明:

[DataContract]
internal class DccCoachApi
{
[DataMember]
public string result { get; set; }
public string id_user { get; set; }
public string dob_match { get; set; }
public string first_name_match { get; set; }
public string last_name_match { get; set; }
}

在我的流方法中,我的 streamRead 变量充满了:{“状态”:“成功”,“数据”:{“结果”:“匹配”,“id_user”:26564,“dob_match”:null,“first_name_match”:null,“last_name_match”:null}, “代码”:200}

方法 1 不填充 coachId:

            using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(streamRead)))
{
// Deserialization from JSON
var deserializer = new DataContractJsonSerializer(typeof(DccCoachApi));
var dccObj = (DccCoachApi)deserializer.ReadObject(ms);
coachId = dccObj.id_user;
}

方法2也不行:

            DccCoachApi coach = new JavaScriptSerializer().Deserialize<DccCoachApi>(streamRead);

coachId = coach.id_user;

方法三也不行:

            JavaScriptSerializer js = new JavaScriptSerializer();
DccCoachApi dccObj = js.Deserialize<DccCoachApi>(streamRead);
coachId = dccObj.id_user;

方法4也不行:

            dynamic dccObject = js.Deserialize<dynamic>(streamRead);
coachId = dccObject["id_user"];

当我直接从方法 4 中提取值时产生的硬错误是:System.Collections.Generic.KeyNotFoundException:字典中不存在给定的键。在 System.Collections.Generic.Dictionary`2.get_Item(TKey 键)

方法 1-3 不会遇到硬错误,但是它们会在没有数据的情况下填充 coachId。

有人可以告诉我我做错了什么吗?

最佳答案

您可以在这里简单地生成适当的类:http://json2csharp.com/

这应该是您不需要 DataMember 属性的样子,它可能会混淆序列化程序,使其只反序列化此单个属性:

public class Data
{
public string result { get; set; }
public int id_user { get; set; }
public object dob_match { get; set; }
public object first_name_match { get; set; }
public object last_name_match { get; set; }
}

public class RootObject
{
public string status { get; set; }
public Data data { get; set; }
public int code { get; set; }
}

代码:

var deserializer = DataContractJsonSerializer(typeof(RootObject));
var root = (RootObject)deserializer.ReadObject(ms);
var coachId = root.data.id_user;

关于c# - 使用 C# 对 JSON 进行反序列化的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46736575/

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