更新:对于tl; dr版本跳到底部
我有一个非常简单的JsonConverter子类,我正在使用Web API:
public class DbGeographyJsonConverter : JsonConverter
{
public override bool CanConvert(Type type)
{
return typeof(DbGeography).IsAssignableFrom(type);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var value = (string)reader.Value;
if (value.StartsWith("POINT", StringComparison.OrdinalIgnoreCase))
{
return DbGeography.PointFromText(value, DbGeography.DefaultCoordinateSystemId);
}
else if (value.StartsWith("POLYGON", StringComparison.OrdinalIgnoreCase))
{
return DbGeography.FromText(value, DbGeography.DefaultCoordinateSystemId);
}
else //We don't want to support anything else right now.
{
throw new ArgumentException();
}
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
serializer.Serialize(writer, …Run Code Online (Sandbox Code Playgroud) 我试图从数据库中获取Spartial数据,然后将其序列化(工作得很好).当我尝试反序列化该数据时,抛出JsonSerializationException.
DbGeography geoPoint = CreatePoint(40.7056308, -73.9780035);
string serializedPoint = JsonConvert.SerializeObject(geoPoint);
DbGeography resjson = JsonConvert.DeserializeObject<DbGeography>(serializedPoint);
Run Code Online (Sandbox Code Playgroud)
这是CreatePoint方法:
public static DbGeography CreatePoint(double latitude, double longitude)
{
string text = string.Format(CultureInfo.InvariantCulture.NumberFormat,
"POINT({0} {1})", longitude, latitude);
return DbGeography.PointFromText(text, 4326);
}
Run Code Online (Sandbox Code Playgroud)
我在控制台应用程序中生成了此错误.
Nuget Packages installed:
EntityFramework 6.1.0
Newtonsoft.Json 6.0.3
Run Code Online (Sandbox Code Playgroud)
有谁知道我做错了什么?