将 JSON 反序列化为 C# 对象

我正在尝试将 json 对象反序列化为 c# 对象,但无法做到。这是我发送的 json 对象


{

    "User_":

    {

        "Email":"test@test.com",

        "Password":"pass1"

    }

}

这是我使用的 C# 类


public class User_

{

    public string Email { get; set; }

    public string Password { get; set; }

}

public class User_ { public string Email { get; 放; } 公共字符串密码 { 得到; 放; } }


public class RootObject

{

    public User_ User_ { get; set; }

}

这是我用来反序列化的代码


RootObject request = JsonConvert.DeserializeObject<RootObject>(json.ToString());

此代码创建一个 User_ 对象,但 Email 和 Password 字段为空。我在这里做错了什么?


在调试时,我看到了即将发生的事情


{{ "{\"Email_\":\"test@test.com\",\"Password_\":\"pass1\"}": ""  }}

看起来很奇怪


动漫人物
浏览 136回答 5
5回答

梦里花落0921

如果我这样做,我会得到 和 的正确Email值Password:public class User_&nbsp; {&nbsp; &nbsp; public string Email { get; set; }&nbsp; &nbsp; public string Password { get; set; }&nbsp; }&nbsp; public class RootObject&nbsp; {&nbsp; &nbsp; public User_ User_ { get; set; }&nbsp; }&nbsp; class Program&nbsp; {&nbsp; &nbsp; static void Main(string[] args)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; string jsonString = "{\"User_\":{\"Email\":\"test@test.com\",\"Password\":\"pass1\"}}";&nbsp; &nbsp; &nbsp; RootObject request = JsonConvert.DeserializeObject<RootObject>(jsonString.ToString());&nbsp; &nbsp; &nbsp; Console.WriteLine("Email: {0}", request.User_.Email);&nbsp; &nbsp; &nbsp; Console.WriteLine("Password: {0}", request.User_.Password);&nbsp; &nbsp; &nbsp; Console.ReadLine();&nbsp; &nbsp; }&nbsp; }你可以看到它在这里工作

开满天机

[JsonProperty("KeyName")]当您的键名不是纯字母时,为什么不使用。[JsonProperty("KeyName")]为您提供反序列化此类包含一些键的 json 的优势用户_用户$@用户*用户&还有很多只需将此属性添加到您的类属性中即可[JsonProperty("User_")] public&nbsp;User&nbsp;User&nbsp;{&nbsp;get;&nbsp;set;&nbsp;}这使您的属性名称保持简单且更具可读性所以最后为你的 json{&nbsp; &nbsp; "User_":&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; "Email_":"test@test.com",&nbsp; &nbsp; &nbsp; &nbsp; "Password_":"pass1"&nbsp; &nbsp; }}添加后的所有类JsonProperty看起来像public class RootObject{&nbsp; &nbsp; [JsonProperty("User_")]&nbsp; &nbsp; public User User { get; set; }}public class User{&nbsp; &nbsp; [JsonProperty("Email_")]&nbsp; &nbsp; public string Email { get; set; }&nbsp; &nbsp; [JsonProperty("Password_")]&nbsp; &nbsp; public string Password { get; set; }}用法:RootObject request = JsonConvert.DeserializeObject<RootObject>(json.ToString());Console.WriteLine(request.User.Email);Console.WriteLine(request.User.Password);输出:

慕妹3242003

直接反序列化类的对象时,JSON 中不需要类名。另一方面,如果您反序列化上面给出的 JSON,则使用 RootObject 反序列化var user = JsonConvert.DeserializeObject<RootObject>(json.ToString()).User_;和public class RootObject{&nbsp; &nbsp; public User_ User_ { get; set; }}或者而是反序列化以下 JSON:&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; "Email":"test@test.com",&nbsp; &nbsp; &nbsp; &nbsp; "Password":"pass1"&nbsp; &nbsp; }

慕标琳琳

我相信你的 c# 类中有 2 个问题在你的RootObject课上你必须使用public&nbsp;User_&nbsp;User{get;set;}当您序列化 Json 时,您必须使用。User_&nbsp;request&nbsp;=&nbsp;JsonConvert.DeserializeObject<RootObject>(json.ToString());这将解决您的问题。

浮云间

主要问题是您的 RootObject 被序列化为新对象的属性名称,字符串为空作为值。许多序列化服务器端的结果。而且您可以轻松处理这些问题,一旦密码/电子邮件更改,您将需要一个新密码/电子邮件,以下课程将仅适用于此确切的 Json 响应。public partial class DontDoThis{&nbsp; &nbsp; [JsonProperty("{\"Email_\":\"test@test.com\",\"Password_\":\"pass1\"}")]&nbsp; &nbsp; public string EmailTestTestComPasswordPass1 { get; set; }}为了解决这个问题,您需要:- 更改代码服务器端以提供正确的结果。- 字符串操作以删除和取消转义结果。-反序列化一次并再次反序列化。
打开App,查看更多内容
随时随地看视频慕课网APP