C# 如何通过JSON反序列化捕获特定值?
我用.NET捕获了一个JSON:C# 如何通过JSON反序列化捕获特定值?,c#,.net,json,deserialization,C#,.net,Json,Deserialization,我用.NET捕获了一个JSON: string result = json_serializer.Deserialize(myJSON); JSON的结构如下所示: result data[0] user bio name nickname data[1] user bio name nickname
string result = json_serializer.Deserialize(myJSON);
JSON的结构如下所示:
result
data[0]
user
bio
name
nickname
data[1]
user
bio
name
nickname
data[2]
user
bio
name
nickname
我只想得到有一些值的第一个昵称(字符串):我的意思是,它不是空的,也不是空的
我该怎么做呢?您可以使用(在NuGet中搜索Newtonsoft Json)。假设您的JSON看起来像:
{ "result": [ { "bio": "foo", "name": "Robin", "nickname": "Moll" },
{ "bio": "bar", "name": "Ted", "nickname": "DoctorZ" },
{ "bio": "moo", "name": "Barney", "nickname": "Wait4it" } ]
}
然后获取第一个用户的名称:
JObject jo = JObject.Parse(json);
var name = (string)jo["result"][0]["name"]; // Robin
当然,如果可能没有任何用户,则应验证用户是否存在:
JObject jo = JObject.Parse(json);
var user = jo["result"].FirstOrDefault();
if (user != null)
name = (string)user["name"];
您可以使用(搜索NuGet以获取Newtonsoft Json)。假设您的JSON看起来像:
{ "result": [ { "bio": "foo", "name": "Robin", "nickname": "Moll" },
{ "bio": "bar", "name": "Ted", "nickname": "DoctorZ" },
{ "bio": "moo", "name": "Barney", "nickname": "Wait4it" } ]
}
然后获取第一个用户的名称:
JObject jo = JObject.Parse(json);
var name = (string)jo["result"][0]["name"]; // Robin
当然,如果可能没有任何用户,则应验证用户是否存在:
JObject jo = JObject.Parse(json);
var user = jo["result"].FirstOrDefault();
if (user != null)
name = (string)user["name"];
据我从你的问题中了解,你会想要这样的东西
public string FirstUserNickname(string JsonUserInfo)
{
JavaScriptSerializer JsonSerializer = new JavaScriptSerializer();
ResultData Results = JsonSerializer.Deserialize<ResultData>(JsonUserInfo);
foreach (UserInfo UserInfo in Results.result)
{
if (string.IsNullOrEmpty(UserInfo.nickname))
return UserInfo.nickname;
}
return null;
}
public class ResultData
{
public List<UserInfo> result;
}
public class UserInfo
{
public string bio;
public string name;
public string nickname;
}
公共字符串firstUser昵称(字符串JsonUserInfo)
{
JavaScriptSerializer JsonSerializer=新的JavaScriptSerializer();
ResultData Results=JsonSerializer.Deserialize(JsonUserInfo);
foreach(Results.result中的UserInfo UserInfo)
{
if(string.IsNullOrEmpty(UserInfo.昵称))
返回UserInfo.昵称;
}
返回null;
}
公共类结果数据
{
公开名单结果;
}
公共类用户信息
{
公共字符串bio;
公共字符串名称;
公共字符串昵称;
}
这将实现您的目标,并且是一种强类型方法,使用
System.Web.Extensions
程序集中的JavaScriptSerializer
类,可以找到更多信息。根据我从您的问题中了解到的情况,您可能想要这样的东西
public string FirstUserNickname(string JsonUserInfo)
{
JavaScriptSerializer JsonSerializer = new JavaScriptSerializer();
ResultData Results = JsonSerializer.Deserialize<ResultData>(JsonUserInfo);
foreach (UserInfo UserInfo in Results.result)
{
if (string.IsNullOrEmpty(UserInfo.nickname))
return UserInfo.nickname;
}
return null;
}
public class ResultData
{
public List<UserInfo> result;
}
public class UserInfo
{
public string bio;
public string name;
public string nickname;
}
公共字符串firstUser昵称(字符串JsonUserInfo)
{
JavaScriptSerializer JsonSerializer=新的JavaScriptSerializer();
ResultData Results=JsonSerializer.Deserialize(JsonUserInfo);
foreach(Results.result中的UserInfo UserInfo)
{
if(string.IsNullOrEmpty(UserInfo.昵称))
返回UserInfo.昵称;
}
返回null;
}
公共类结果数据
{
公开名单结果;
}
公共类用户信息
{
公共字符串bio;
公共字符串名称;
公共字符串昵称;
}
这将实现您的目标,并且是一种强类型方法,使用System.Web.Extensions
程序集中的JavaScriptSerializer
类,可以找到更多信息。使用可以反序列化到.net对象,如下所示:
Result deserializedResult = JsonConvert.DeserializeObject<Result>(json);
使用可以反序列化到.net对象,如下所示:
Result deserializedResult = JsonConvert.DeserializeObject<Result>(json);
你能发布一个json输入的例子吗?它是按照json的样子编写的@不,你没有。Json可能看起来像
{“result”:[{“bio”:“blah”,“name”:“foo”,“昵称”:“bar”}]}
目的是复制示例以运行,而不是再次构建Json字符串,这需要时间us@lazyberezovsky:是的,我是这样写的:o你可以发布一个json输入的例子吗?我是按照json的样子写的@不,你没有。Json可能看起来像{“result”:[{“bio”:“blah”,“name”:“foo”,“昵称”:“bar”}]}
目的是复制示例以运行,而不是再次构建Json字符串,这需要时间us@lazyberezovsky:是的,我就是这样写的