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\":\"test@test.com\",\"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_":"test@test.com",
"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":"test@test.com",
"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_\":\"test@test.com\",\"Password_\":\"pass1\"}")]
public string EmailTestTestComPasswordPass1 { get; set; }
}
为了解决这个问题,您需要:
- 更改代码服务器端以提供正确的结果。
- 字符串操作以删除和取消转义结果。
-反序列化一次并再次反序列化。
- 5 回答
- 0 关注
- 135 浏览
添加回答
举报