c#JSONConvert.DeserializeObject <list <rootobject>&gt;返回null

时间:2017-03-17 19:43:03

标签: c# json.net generic-collections

我正在尝试将HTTPWebRequest响应(Json)反序列化为c#object / class,但遇到了麻烦。返回具有10个对象实例的集合,并且所有对象都为null。

这是json:

[
{
"id":2227,
"user_id":441,
"grades":
    {"html_url":"https://...",
    "current_score":91.26,
    "current_grade":null,
    },
"sis_account_id":"11",
"user":
    {"id":441,
     "name":"Nicholas Bailey",
    }
},

以下是课程:

    public class Grade
{
    public string html_url { get; set; }
    public decimal current_score { get; set; }
    public string current_grade { get; set; }
}
public class User
{
    public int id { get; set; }
    public string name { get; set; }
}
public class Enrollment
{
    public int id { get; set; }
    public int user_id { get; set; }
    public Grade grades { get; set; }
    public string sis_account_id { get; set; }
    public User user { get; set; }
}
public class RootObject
{
    public Enrollment enrollment { get; set; }
}

这是我的代码:

  HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://(some uri)");

        WebResponse response = request.GetResponse();

        StreamReader sr = new StreamReader(response.GetResponseStream());

        string content = sr.ReadToEnd();

        JsonSerializerSettings settings = new JsonSerializerSettings();
        settings.MetadataPropertyHandling = MetadataPropertyHandling.Ignore;

        var outObject = JsonConvert.DeserializeObject<List<RootObject>>(content, settings);

我一直在谷歌上看很多代码,但没有找到一个接近我的情况。此外,我对泛型集合有点绿色。代码运行正常但在调试器中“outObject”包含10个条目,每个条目都有一个“Enrollment”对象为null。

我也尝试过这个有超过10个条目的json,但它仍然会出现10.但是我现在更专注于空值(一次一件事!)。为了简洁起见,我删除了json中的几个条目,但主模式(具有grade对象和嵌入其中的用户对象的注册对象)仍然存在。

非常感谢任何帮助。谢谢。

1 个答案:

答案 0 :(得分:1)

反序列化为<?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.kuba.myapplication3.MyListActivity"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/AppTheme.AppBarOverlay" > <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay" /> </android.support.design.widget.AppBarLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/background_dark" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <EditText android:id="@+id/editText2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:ems="10" android:inputType="textPersonName" android:text="@string/txt_searching" android:textColor="@android:color/white" /> <Button android:id="@+id/button" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="ButtonTxt" /> </LinearLayout> <ListView android:id="@+id/myList" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:dividerHeight="1dp" /> </LinearLayout> 而非List<Enrollment>

List<RootObject>

根数组中的第一个JSON对象具有与var enrollment = JsonConvert.DeserializeObject<List<Enrollment>>(content, settings); 的成员对应的属性"id""user_id"等等。相反,JSON中没有任何属性Enrollment

示例fiddle

<强>更新

你问,我试过这个,现在我得到一个例外“将值{null}转换为'System.Int32'的错误。路径'[0] .associated_user_id',第1行,第165位。 “为简洁起见,删除了associated_user_id,但我会将其添加回我的代码中。有什么想法吗?

您的数据模型必须具有以下成员(字段或属性):

"enrollment"

将此更改为可为空的:

public int associated_user_id;