0

私はこのような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」は整数であるため、例外があります。この値をスキップするにはどうすればよいですか?

4

1 に答える 1

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

もちろん、成功シナリオで何が返されると期待するかに応じて、このアプローチ(物事を変える)を試すことができます。

于 2012-06-26T21:03:16.727 に答える