Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何通过JSON反序列化捕获特定值?_C#_.net_Json_Deserialization - Fatal编程技术网

C# 如何通过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

我用.NET捕获了一个JSON:

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:是的,我就是这样写的