亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將 JSON 反序列化為 C# 對象

將 JSON 反序列化為 C# 對象

C#
動漫人物 2022-12-04 11:07:27
我正在嘗試將 json 對象反序列化為 c# 對象,但無法做到。這是我發送的 json 對象{    "User_":    {        "Email":"[email protected]",        "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_\":\"[email protected]\",\"Password_\":\"pass1\"}": ""  }}看起來很奇怪
查看完整描述

5 回答

?
夢里花落0921

TA貢獻1772條經驗 獲得超6個贊

如果我這樣做,我會得到 和 的正確Email值Password:


public class User_

  {

    public string Email { get; set; }

    public string Password { get; set; }

  }


  public class RootObject

  {

    public User_ User_ { get; set; }

  }


  class Program

  {

    static void Main(string[] args)

    {

      string jsonString = "{\"User_\":{\"Email\":\"[email protected]\",\"Password\":\"pass1\"}}";

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

      Console.WriteLine("Email: {0}", request.User_.Email);

      Console.WriteLine("Password: {0}", request.User_.Password);

      Console.ReadLine();

    }

  }

你可以看到它在這里工作


查看完整回答
反對 回復 2022-12-04
?
開滿天機

TA貢獻1786條經驗 獲得超13個贊

[JsonProperty("KeyName")]當您的鍵名不是純字母時,為什么不使用。

[JsonProperty("KeyName")]為您提供反序列化此類包含一些鍵的 json 的優勢

  • 用戶_

  • 用戶$

  • @用戶

  • *用戶&

還有很多

只需將此屬性添加到您的類屬性中即可

[JsonProperty("User_")]
public User User { get; set; }

這使您的屬性名稱保持簡單且更具可讀性

所以最后為你的 json

{

    "User_":

    {

        "Email_":"[email protected]",

        "Password_":"pass1"

    }

}

添加后的所有類JsonProperty看起來像


public class RootObject

{

    [JsonProperty("User_")]

    public User User { get; set; }

}


public class User

{

    [JsonProperty("Email_")]

    public string Email { get; set; }


    [JsonProperty("Password_")]

    public string Password { get; set; }

}

用法:


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


Console.WriteLine(request.User.Email);

Console.WriteLine(request.User.Password);

輸出:

http://img1.sycdn.imooc.com//638c0f1a0001dcee01170052.jpg

查看完整回答
反對 回復 2022-12-04
?
慕妹3242003

TA貢獻1824條經驗 獲得超6個贊

直接反序列化類的對象時,JSON 中不需要類名。另一方面,如果您反序列化上面給出的 JSON,則使用 RootObject 反序列化


var user = JsonConvert.DeserializeObject<RootObject>(json.ToString()).User_;


public class RootObject

{

    public User_ User_ { get; set; }

}

或者


而是反序列化以下 JSON:


    {

        "Email":"[email protected]",

        "Password":"pass1"

    }


查看完整回答
反對 回復 2022-12-04
?
慕標琳琳

TA貢獻1830條經驗 獲得超9個贊

我相信你的 c# 類中有 2 個問題

  1. 在你的RootObject課上你必須使用

    public User_ User{get;set;}
  2. 當您序列化 Json 時,您必須使用。

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

這將解決您的問題。


查看完整回答
反對 回復 2022-12-04
?
浮云間

TA貢獻1829條經驗 獲得超4個贊

主要問題是您的 RootObject 被序列化為新對象的屬性名稱,字符串為空作為值。許多序列化服務器端的結果。


而且您可以輕松處理這些問題,一旦密碼/電子郵件更改,您將需要一個新密碼/電子郵件,以下課程將僅適用于此確切的 Json 響應。


public partial class DontDoThis

{

    [JsonProperty("{\"Email_\":\"[email protected]\",\"Password_\":\"pass1\"}")]

    public string EmailTestTestComPasswordPass1 { get; set; }

}

為了解決這個問題,您需要:

- 更改代碼服務器端以提供正確的結果。

- 字符串操作以刪除和取消轉義結果。

-反序列化一次并再次反序列化。


查看完整回答
反對 回復 2022-12-04
  • 5 回答
  • 0 關注
  • 201 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號