5 回答

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();
}
}
你可以看到它在這里工作

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);
輸出:

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"
}

TA貢獻1830條經驗 獲得超9個贊
我相信你的 c# 類中有 2 個問題
在你的
RootObject
課上你必須使用public User_ User{get;set;}
當您序列化 Json 時,您必須使用。
User_ request = JsonConvert.DeserializeObject<RootObject>(json.ToString());
這將解決您的問題。

TA貢獻1829條經驗 獲得超4個贊
主要問題是您的 RootObject 被序列化為新對象的屬性名稱,字符串為空作為值。許多序列化服務器端的結果。
而且您可以輕松處理這些問題,一旦密碼/電子郵件更改,您將需要一個新密碼/電子郵件,以下課程將僅適用于此確切的 Json 響應。
public partial class DontDoThis
{
[JsonProperty("{\"Email_\":\"[email protected]\",\"Password_\":\"pass1\"}")]
public string EmailTestTestComPasswordPass1 { get; set; }
}
為了解決這個問題,您需要:
- 更改代碼服務器端以提供正確的結果。
- 字符串操作以刪除和取消轉義結果。
-反序列化一次并再次反序列化。
- 5 回答
- 0 關注
- 201 瀏覽
添加回答
舉報