1

JSON 文字列に文字列が必要な場所に空のオブジェクト値が含まれていると、Json.net デシリアライゼーションが失敗します。

 public class MyObj
{
    public Labels labels { get; set; }
    public Type type { get; set; }
    public int value { get; set; }
    [JsonConverter(typeof(SliderTextConverter))]
    public string text { get; set; }
}

「テキスト」は、ソース JSON 文字列「{}」の空のオブジェクトと等しい場合があります。このため、JSON.net デシリアライザーは爆撃しているようです。したがって、これを回避するためにカスタム JsonConverter を作成しようとしています。

 public class SliderTextConverter : JsonConverter 
{
    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        if(reader.Value == null)
        {
            return null;
        }
        return serializer.Deserialize<string>(reader);
    }

    public override bool CanConvert(Type objectType)
    {
        return true;
    }
}

値が null かどうかを確認してから、「null」を返すだけです。これは機能しません。また、「」を返そうとしました。どちらも同じエラーになります。

オブジェクトのデシリアライズ中に予期しないトークンが発生しました: EndObject。パス 'data.MyObj[5].text;

ソースjsonでこれらの空のオブジェクトを無視/処理する正しい方法は何ですか?

ありがとう!

4

1 に答える 1

0

Json.NET に関するこの投稿は、同じ問題を参照しているようです: http://james.newtonking.com/archive/2012/04/11/json-net-4-5-release-2-serializable-support-and-bug -fixes.aspx

Changes:    
    Fix - Fixed deserializing a null string throwing a NullReferenceException 
于 2012-06-18T22:54:27.813 に答える