1

私はこのようないくつかのjsonデータを持っています:

{
    'vehicles':{
    ...
    },
    'arenaUniqueID':214197923159382012L,
    'common':{
    ...
    },
    'players':{
    ...
    },
    'personal':{
    ...
    }
}

このデータを逆シリアル化するためのクラス

public class UnPickledData
{
    public Dictionary<int, Vehicle> vehicles { get; set; }        
    public long arenaUniqueID { get; set; }
    public Common common { get; set; }
    public Dictionary<int, Player> players { get; set; }
    public Personal personal { get; set; }
}

逆シリアル化プログラム中に例外がスローされます:

値を解析した後、予期しない文字が検出されました: L. Path arenaUniqueID', line 1, position 51810.

そのプロパティ用に独自のカスタム JSONConverter を作成しようとしました: クラスが変更されました:

public class UnPickledData
{
    public Dictionary<int, Vehicle> vehicles { get; set; }
    [JsonConverter(typeof(CustomLongConverter))]
    public Int64 arenaUniqueID { get; set; }
    public Common common { get; set; }
    public Dictionary<int, Player> players { get; set; }
    public Personal personal { get; set; }
}

コンバーターコード:

class CustomLongConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(long);
    }
    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        return Int64.Parse(reader.Value.ToString());           
    }
    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        throw new NotSupportedException();
    }
}

ただし、この例外は引き続き発生します。

私が間違っていることと、これを修正する方法は?

ps Newtonsoft.JSON v5.0.5.16108/.Net FW 3.5/VS 2010 を使用

4

1 に答える 1

3

数字の後の L は有効な JSON ではありません。

于 2013-06-17T03:57:17.427 に答える