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