我创建了以下代码:
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/给出的步骤,但没有成功。我在做什么错了?
答案 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
现在具有所有预期的属性。