0

我用 .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    

而且我只想获得第一个具有某些价值的昵称(作为字符串):我的意思是,它不为空也不为空。

我该怎么做?

4

3 回答 3

2

从我从你的问题中了解到,你会想要这样的东西,

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;
}

这将实现您的目标,并且是一种强类型方法,使用程序集中的JavaScriptSerializerSystem.Web.Extensions,可以在此处找到更多信息。

于 2013-01-28T10:26:08.673 回答
1

您可以使用Linq to JSON(在 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"];
于 2013-01-28T10:05:46.310 回答
1

使用Linq to JSON,您可以反序列化为 .net 对象,如下所示:

Result deserializedResult = JsonConvert.DeserializeObject<Result>(json);

之后,您可以使用 LINQ 查询对象:

User nicknameduser = deserializedResult.Users
  .FirstOrDefault(r => !string.IsNullOrEmpty(r.nickname))
if (nicknameduser == null) return null;
return nicknameduser.nickname;
于 2013-01-28T10:29:39.147 回答