【问题标题】:Null class when deserializing Json C#反序列化 Json C# 时的空类
【发布时间】:2020-12-14 16:44:34
【问题描述】:

我有这个 PHP

            if ($result->num_rows === 1) {
                    $sql = ("SELECT username, email, plan, activationdate, terminationdate FROM users WHERE username = '$username' LIMIT 1");
$res = mysqli_query($conn,$sql);
if ($res->num_rows === 1) {
while($row = mysqli_fetch_object($res)){
$arr = array( $row);
echo json_encode($arr);

正确返回此 json [{"username":"xxxxx","email":"xxxxxx","plan":"0","activationdate":"","terminationdate":""}]

现在在 c# 中,我尝试使用反序列化 List<Information> resinfo = JsonConvert.DeserializeObject<List<Information>>(str2); 并返回空值

请注意,在图片中 Null result 但 json 字符串按预期返回值 Json string

这是我的课

public class Information
{

    public static string username { get; set; }
    public static string email { get; set; }
    public static string plan { get; set; }
    public static string activationdate { get; set; }
    public static string terminationdate { get; set; }
}

当我尝试反序列化到类中时,为什么我得到 null 以及如何正确反序列化?

值得一提的是,我尝试了这个var json = JsonConvert.DeserializeObject<List<Information>>(str2);,结果相同

【问题讨论】:

    标签: c# json class serialization null


    【解决方案1】:

    这是因为您在 Information 类中的所有属性都是 static。删除 static 关键字,然后重试。

    JsonConvert.DeserializeObject 将只设置实例属性,因此它们不能被声明为静态。

    执行后查看removedFines 变量(如your image)。

    【讨论】:

    • 感谢您的回答。删除 static 会得到以下 !Image。 (我更改了变量以使其更具可读性)
    • 它是空的,因为它没有被执行。尝试将断点放在一行下方,然后查看结果。如果您没有任何代码,只需放在那里 var test = 1;例如。
    • 谢谢。它现在确实返回正确的值。最后一个问题。假设我想使用“用户名”中的字符串并将其显示在另一种形式的标签中,或者在这种情况下显示为用户控件。我该怎么做。因为简单地从用户控件调用label1.text = Information.username 是行不通的。这就是为什么我首先拥有静态属性。
    • 在您的情况下,它是一个信息列表。您必须调用 UiInfo[0].username 这意味着您将在列表中显示第一个信息类的用户名。
    • 如果您想以另一种形式显示它,您可以将其作为参数传递,或者您可以将列表设为静态(但这不是一个好方法)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    相关资源
    最近更新 更多