用Json .Net忽略自定义孩子

时间:2012-06-26 19:36:40

标签: c# .net json.net

我有这样的json回复:

{"response_values":[110,{"id":14753,"name":"piter"},{"id":14753,"name":"rabbit"}]}

我有一个简单的课程

public class Class1
{
    [JsonProperty("id")]
    public int Id { get; set; }

    [JsonProperty("name")]
    public string Name { get; set; }
}

当我尝试使用此方法将json转换为对象列表时:

public T Cast<T>(string json)
{
    var result = default(T);

    var jsonObject = JObject.Parse(json);
    if (jsonObject != null)
    {
        var responseToken = jsonObject["response"];
        result = responseToken.ToObject<T>();
    }

    return result;
}
像这样

...

var jsonString = GetJson();
var items = Cast<List<Class1>>();

...

我有一个例外,因为值“110”是整数。我怎么能跳过这个值?

1 个答案:

答案 0 :(得分:1)

如果您希望忽略的值始终位于开头,则始终具有此选项:

if (jsonObject != null)
{
    var responseToken = parsed["response_values"].SkipWhile(j => j.Type != JTokenType.Object);
    if (responseToken.Count() > 0) result = responseToken.ToObject<T>();
}

如果它始终是第一个值,您可能更愿意使用Skip(1)而不是SkipWhile。或者,您可以使用Where忽略或选择邮件中的任何位置。

当然,你可以使用这种方法(改变一些事情),具体取决于你期望在成功场景中返回的内容。