2

トライアルで JSON.Net を使用して、あまり整形式でない JSON をシリアル化/逆シリアル化しています。

具体的には、次のような js 変数を値として属性をシリアル化しようとしています。

{ ..., mapTypeId: google.maps.MapTypeId.ROADMAP, ... }

私のC#クラスは

public enum MapTypeId
{
    HYBRID, ROADMAP, SATELLITE, TERRAIN
}

[JsonObject]
public class MapOptions
{
    ...

    [JsonProperty]
    [JsonConverter(typeof(MapTypeConverter))]
    public MapTypeId mapTypeId { get; set; }

    ...
}

カスタムJsonConverterを使用して、シリアル化を制御できました。

public class MapTypeConverter : JsonConverter
{
    ...

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        writer.WriteRawValue("google.maps.MapTypeId." + ((MapTypeId)value).ToString());
    }

    ...
}

そしてシリアル化が機能します。しかし、次のように文字列を逆シリアル化しようとすると:

JsonConvert.DeserializeObject<MapOptions>(ser);

エラーが発生します:Unexpected character encountered while parsing value: g. Path 'mapTypeId', line 1, position 169.

私の MapTypeConverter では、 ReadJson メソッドのオーバーライドも試みました。

public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
    // no parse by now, just a try
    return MapTypeId.TERRAIN;
}

運がなければ。

提案?

4

0 に答える 0