无法从Json C#获取特定的字符串

时间:2018-09-23 10:12:42

标签: c# json

这是我的json的样子: enter image description here

我创建了以下代码:

public class user
{
    public string username { get; set; }
    public int userid
    {
        get;
        set;
    }
    public string red
    {
        get;
        set;
    }

    public string acompaccompelted_setup
    {
        get;
        set;
    }
}

要从URL获取数据,我使用了以下代码:

string url = "localhost/testingdata/file.json";
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
string jsonValue = "";
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)  
{
    StreamReader reader = new StreamReader(response.GetResponseStream());
    json = reader.ReadToEnd();
}

user  listing = JsonConvert.DeserializeObject<user>(json);

Console.WriteLine(listing.username);
Console.ReadLine();

不幸的是,我无法获取字符串“ username”的值。它返回一个空值。如果我尝试使用:

List<user> items = JsonConvert.DeserializeObject<List<user>>(json);

然后我又遇到另一个错误。如果我拨打电话:

Console.WriteLine(json);

然后我将获取JSON的完整列表。但是我只想提取用户名。我尝试遵循此处https://www.c-sharpcorner.com/article/working-with-json-in-C-Sharp/给出的步骤,但没有成功。我在做什么错了?

1 个答案:

答案 0 :(得分:2)

定义包装器UserInfo类以表示整个对象,如下所示:

class UserInfo
{
    [JsonProperty(PropertyName = "user", NullValueHandling = NullValueHandling.Ignore)]
    public User User { get; set; }
}

如下定义User类:

class User
{
    [JsonProperty(PropertyName = "userName", NullValueHandling = NullValueHandling.Ignore)]
    public string UserName { get; set; }
    [JsonProperty(PropertyName = "userId", NullValueHandling = NullValueHandling.Ignore)]
    public long  UserId { get; set; }
    [JsonProperty(PropertyName = "accompletedSetup", NullValueHandling = NullValueHandling.Ignore)]
    public string AccompletedSetup { get; set; }
    [JsonProperty(PropertyName = "accompletedInfo", NullValueHandling = NullValueHandling.Ignore)]
    public AccompletedInfo AccompletedInfo { get; set; }
}

accompletedInfo属性是一个复杂的对象。因此,定义一个新类来表示它,如下所示:

class AccompletedInfo
{
}

对所有嵌套对象遵循相同的模式。也就是说,为每个嵌套对象定义一个类,并在JsonProperty属性中添加属性和属性名称。

然后使用JsonConvert反序列化,如下所示:

var user = JsonConvert.DeserializeObject<UserInfo>(json);

对象user现在具有所有预期的属性。