Asp.net DbGeography实体框架的反序列化
我有一个类Asp.net DbGeography实体框架的反序列化,asp.net,entity-framework,spatial-data,Asp.net,Entity Framework,Spatial Data,我有一个类事件,其属性类型为DbGeography public class Event { public long Id { get; set; } public DateTime Date { get; set; } public DbGeography Location { get; set; } } 在类DatabaseHelper中,我尝试从服务器加载数据 public async Task<IEnumerable<Event>> Ge
事件
,其属性类型为DbGeography
public class Event
{
public long Id { get; set; }
public DateTime Date { get; set; }
public DbGeography Location { get; set; }
}
在类DatabaseHelper
中,我尝试从服务器加载数据
public async Task<IEnumerable<Event>> GetEventsAsync()
{
var uri = new Uri(string.Format(Constants.EventsUrl, string.Empty));
var content = await _client.GetStringAsync(uri);
IEnumerable<Event> events = JsonConvert.DeserializeObject<List<Event>>(content);
return events;
}
我发现我应该使用一个定制的JsonConverter
// DbGeographyConverter.cs
public class DbGeographyConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType.IsAssignableFrom(typeof(string));
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JObject location = JObject.Load(reader);
JToken token = location["Geography"]["WellKnownText"];
string value = token.ToString();
System.Data.Entity.Spatial.DbGeography converted = System.Data.Entity.Spatial.DbGeography.PointFromText(value, 4326);
return converted;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
// Base serialization is fine
serializer.Serialize(writer, value);
}
}
但在调用返回事件对象列表的函数时,会引发以下错误:
Newtonsoft.Json.JsonSerializationException: Error getting value from 'WellKnownValue' on 'System.Data.Entity.Spatial.DbGeography'.
{"Message":"An error has occurred.","ExceptionMessage":"The 'ObjectContent`1' type failed to serialize the response body for content type 'application/json; charset=utf-8'.","ExceptionType":"System.InvalidOperationException","StackTrace":null,"InnerException":{"Message":"An error has occurred.","ExceptionMessage":"Error while copying content to a stream.","ExceptionType":"System.Net.Http.HttpRequestException","StackTrace":" at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.WebHost.HttpControllerHandler.<WriteBufferedResponseContentAsync>d__1b.MoveNext()","InnerException":{"Message":"An error has occurred.","ExceptionMessage":"Could not load file or assembly 'Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)","ExceptionType":"System.IO.FileLoadException","StackTrace":" at System.ModuleHandle.ResolveType(RuntimeModule module, Int32 typeToken, IntPtr* typeInstArgs, Int32 typeInstCount, IntPtr* methodInstArgs, Int32 methodInstCount, ObjectHandleOnStack type)
at System.ModuleHandle.ResolveTypeHandleInternal(RuntimeModule module, Int32 typeToken, RuntimeTypeHandle[] typeInstantiationContext, RuntimeTypeHandle[] methodInstantiationContext)
at System.Reflection.RuntimeModule.ResolveType(Int32 metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments)
at System.Reflection.CustomAttribute.FilterCustomAttributeRecord(CustomAttributeRecord caRecord, MetadataImport scope, Assembly& lastAptcaOkAssembly, RuntimeModule decoratedModule, MetadataToken decoratedToken, RuntimeType attributeFilterType, Boolean mustBeInheritable, Object[] attributes, IList derivedAttributes, RuntimeType& attributeType, IRuntimeMethodInfo& ctor, Boolean& ctorHasParameters, Boolean& isVarArg)
at System.Reflection.CustomAttribute.IsCustomAttributeDefined(RuntimeModule decoratedModule, Int32 decoratedMetadataToken, RuntimeType attributeFilterType, Int32 attributeCtorToken, Boolean mustBeInheritable)
at System.Reflection.CustomAttribute.IsDefined(RuntimePropertyInfo property, RuntimeType caType)
at System.Reflection.RuntimePropertyInfo.IsDefined(Type attributeType, Boolean inherit)
at Newtonsoft.Json.Serialization.DefaultContractResolver.GetSerializableMembers(Type objectType)
at Newtonsoft.Json.Serialization.DefaultContractResolver.CreateProperties(Type type, MemberSerialization memberSerialization)
at Newtonsoft.Json.Serialization.DefaultContractResolver.CreateObjectContract(Type objectType)
at Newtonsoft.Json.Serialization.DefaultContractResolver.CreateContract(Type objectType)
at Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContract(Type type)
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.WriteStartArray(JsonWriter writer, Object values, JsonArrayContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeList(JsonWriter writer, IEnumerable values, JsonArrayContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(JsonWriter jsonWriter, Object value, Type objectType)
at Newtonsoft.Json.JsonSerializer.SerializeInternal(JsonWriter jsonWriter, Object value, Type objectType)
at System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStream(Type type, Object value, Stream writeStream, Encoding effectiveEncoding)
at System.Net.Http.Formatting.JsonMediaTypeFormatter.WriteToStream(Type type, Object value, Stream writeStream, Encoding effectiveEncoding)
at System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStream(Type type, Object value, Stream writeStream, HttpContent content)
at System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStreamAsync(Type type, Object value, Stream writeStream, HttpContent content, TransportContext transportContext, CancellationToken cancellationToken)"}}}
{“Message”:“发生了错误”,“ExceptionMessage”:“ObjectContent`1”类型未能序列化内容类型“application/json;charset=utf-8”的响应正文”,“ExceptionType”:“System.invalidoctionexception”,“StackTrace”:null,“InnerException”:{“Message”:“发生了错误”,“ExceptionMessage”:”:“将内容复制到流时出错。”,“ExceptionType”:“System.Net.Http.HttpRequestException”,“StackTrace”:“在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)时”
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
在System.Web.Http.WebHost.HttpControllerHandler.d_u1b.MoveNext()“,“InnerException:{”消息“:“发生错误。”,“ExceptionMessage:”无法加载文件或程序集“Newtonsoft.Json,Version=10.0.0,Culture=neutral,PublicKeyToken=30ad4fe6b2a6eed”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(HRESULT中的异常:0x8013100)”,“异常类型”:“System.IO.FileLoadException”,“StackTrace”:在System.ModuleHandle.ResolveType(运行时模块模块、Int32 typeToken、IntPtr*typeInstArgs、Int32 typeInstCount、IntPtr*methodInstArgs、Int32 methodInstCount、ObjectHandleOnStack类型)
位于System.ModuleHandle.ResolveTypeHandleInternal(RuntimeModule模块、Int32 typeToken、RuntimeTypeHandle[]TypeInstanceContext、RuntimeTypeHandle[]MethodInstanceContext)
位于System.Reflection.RuntimeModule.ResolveType(Int32 metadataToken,类型[]genericTypeArguments,类型[]genericMethodArguments)
在System.Reflection.CustomAttribute.FilterCustomAttributeRecord(CustomAttributeRecord caRecord,MetadataImport作用域,Assembly&LastAptCookAssembly,RuntimeModule decoratedModule,MetadataToken decoratedToken,RuntimeType attributeFilterType,Boolean必须不可编辑,Object[]属性、IList-derivedAttributes、RuntimeType和attributeType、IRontimeMethodInfo和ctor、Boolean和ctorHasParameters、Boolean和isVarArg)
在System.Reflection.CustomAttribute.IsCustomAttributeDefined(RuntimeModule decoratedModule、Int32 decoratedMetadataToken、RuntimeType attributeFilterType、Int32 attributeCtorToken、Boolean必须不可编辑)
在System.Reflection.CustomAttribute.IsDefined处(RuntimePropertyInfo属性,RuntimeType caType)
在System.Reflection.RuntimePropertyInfo.IsDefined处(类型attributeType,布尔继承)
位于Newtonsoft.Json.Serialization.DefaultContractResolver.GetSerializableMembers(类型objectType)
位于Newtonsoft.Json.Serialization.DefaultContractResolver.CreateProperties(类型,MemberSerialization MemberSerialization)
位于Newtonsoft.Json.Serialization.DefaultContractResolver.CreateObjectContract(类型objectType)
位于Newtonsoft.Json.Serialization.DefaultContractResolver.CreateContract(类型objectType)
位于Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContract(类型)
位于Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.WriteStarray(JsonWriter编写器、对象值、JsonArrayContract契约、JsonProperty成员、JsonContainerContract容器契约、JsonProperty容器属性)
位于Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializationList(JsonWriter编写器、IEnumerable值、JsonArrayContract契约、JsonProperty成员、JsonContainerContract集合契约、JsonProperty容器属性)
位于Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializationValue(JsonWriter编写器、对象值、JsonContract valueContract、JsonProperty成员、JsonContainerContract containerContract、JsonProperty containerProperty)
位于Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.serializate(JsonWriter JsonWriter,对象值,类型objectType)
位于Newtonsoft.Json.JsonSerializer.SerializeInternal(JsonWriter JsonWriter,对象值,类型objectType)
位于System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStream(类型类型、对象值、流writeStream、编码有效编码)
位于System.Net.Http.Formatting.JsonMediaTypeFormatter.WriteToStream(类型类型、对象值、流writeStream、编码有效编码)
位于System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStream(类型类型、对象值、流writeStream、HttpContent)
在System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStreamAsync(类型类型、对象值、流writeStream、HttpContent内容、TransportContext TransportContext、CancellationToken CancellationToken)“}}
可能是什么问题?问题是您引用的是
Newtonsoft.Json 10.0.0.0
Could not load file or assembly 'Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference.
NuGet服务器上似乎不再提供版本10.0.0.0
,因此您无法在本地使用该版本。无法从何处下载。请尝试更新/安装现有版本。该版本可能会正常工作
Install-Package Newtonsoft.Json -Version 10.0.3