Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net DbGeography实体框架的反序列化_Asp.net_Entity Framework_Spatial Data - Fatal编程技术网

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