Jep*_*fod 2 c# serialization asp.net-web-api asp.net-web-api2
我创建了一个webAPI控制器方法,它看起来如下:
[HttpGet]
public HttpResponseMessage RealEstates()
{
using (BoligsideDbContext context = new BoligsideDbContext())
{
List<RealEstateVm> realEstateVms = context.RealEstates.OrderByDescending(x => x.Id).ToList().Select(x => new RealEstateVm(x)).ToList();
return Request.CreateResponse(HttpStatusCode.OK, realEstateVms);
}
}
Run Code Online (Sandbox Code Playgroud)
我的VM看起来如下:
public class RealEstateVm
{
public int Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public int Area { get; set; }
public int Rooms { get; set; }
public int Rent { get; set; }
public string Picture { get; set; }
public RealEstateType Type { get; set; } //this is just an enum
public string Address { get; set; }
public List<string> Images { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public string Phone { get; set; }
public string Phone2 { get; set; }
public string OriginalUrl { get; set; }
public string OriginalSource { get; set; }
public string City { get; set; }
public int ZipCode { get; set; }
public string StreetAddress { get; set; }
public double Longtitude { get; set; }
public double Latitude { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
但是每当我进入端点时,我都会收到以下错误:
类型'Boligside.ViewModels.RealEstateVm'无法序列化.请考虑使用DataContractAttribute属性对其进行标记,并使用DataMemberAttribute属性标记要序列化的所有成员.如果类型是集合,请考虑使用CollectionDataContractAttribute对其进行标记.有关其他受支持的类型,请参阅Microsoft .NET Framework文档.
可能是什么问题?我不明白为什么我要用[DataContractAttribute]标记我的VM?
顺便说一下,完整的错误消息在这里:
此XML文件似乎没有与之关联的任何样式信息.文档树如下所示.发生了错误.'ObjectContent`1'类型无法序列化内容类型'application/xml的响应主体; 字符集= UTF-8' .System.InvalidOperationException发生错误.类型'Boligside.ViewModels.RealEstateVm'无法序列化.请考虑使用DataContractAttribute属性对其进行标记,并使用DataMemberAttribute属性标记要序列化的所有成员.如果类型是集合,请考虑使用CollectionDataContractAttribute对其进行标记.有关其他受支持的类型,请参阅Microsoft .NET Framework文档.系统中的System.Runtime.Serialization.DataContract.DataContractCriticalHelper.ThrowInvalidDataContractException(String message,Type type)System.Runtime.Serialization.InvalidDataContractException System.Runtime.Serialization.DataContract.DataContractCriticalHelper.CreateDataContract(Int32 id,RuntimeTypeHandle typeHandle,Type type) System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerialize(XmlWriterDelegator xmlWriter)中System.Runtime.Serialization.XmlObjectSerializerContext.GetDataContract(Int32 id,RuntimeTypeHandle typeHandle)的.Runtime.Serialization.DataContract.DataContractCriticalHelper.GetDataContractSkipValidation(Int32 id,RuntimeTypeHandle typeHandle,Type type) System.Runtime.Serialization.CollectionDataC上的WriteArrayOfRealEstateVmToXml(XmlWriterDelegator,Object,XmlObjectSerializerWriteContext,CollectionDataContract)中的,Object obj,Boolean isDeclaredType,Boolean writeXsiType,Int32 declaredTypeID,RuntimeTypeHandle declaredTypeHandle)ontract.WriteXmlValue(XmlWriterDelegator的XmlWriter,对象OBJ,XmlObjectSerializerWriteContext上下文)在System.Runtime.Serialization.XmlObjectSerializerWriteContext.WriteDataContractValue(DataContract dataContract,XmlWriterDelegator的XmlWriter,对象OBJ,的RuntimeTypeHandle declaredTypeHandle)在System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithoutXsiType(DataContract dataContract,在System.Runtime.Serialization.DataContractSerializer.InternalWriteObject(XmlWriterDelegator writer,Object graph,DataContractResolver dataContractResolver)的System.Runtime.Serialization.DataContractSerializer.InternalWriteObjectContent(XmlWriterDelegator writer,Object graph,DataContractResolver dataContractResolver)中的XmlWriterDelegator xmlWriter,Object obj,RuntimeTypeHandle declaredTypeHandle) System.Runtime中的System.Runtime.Serialization.XmlObjectSerializer.WriteObjectHandleExceptions(XmlWriterDelegator writer,Object graph,DataContractResolver dataContractResolver)System.Net.Http.Formatting.XmlMediaTypeFormatter.WriteToStreamAsync上的System.Net.Http.Formatting.XmlMediaTypeFormatter.WriteToStream(Type type,Object value,Stream writeStream,HttpContent content)中的.Serialization.DataContractSerializer.WriteObject(XmlWriter writer,Object graph) (类型类型,对象值,流writeStream,HttpContent内容,TransportContext transportContext,CancellationToken cancellationToken)---从抛出异常的先前位置开始的堆栈跟踪---在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) System.Web.Http.WebHost.HttpControllerHandler.d__1b.MoveNext()上的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)
小智 6
正如错误所说,它无法序列化并考虑添加数据契约属性.
using System.Runtime.Serialization;
[DataContract]
public class RealEstateVm
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string Title { get; set; }
[DataMember]
public string Description { get; set; }
[DataMember]
public int Area { get; set; }
[DataMember]
public int Rooms { get; set; }
[DataMember]
public int Rent { get; set; }
[DataMember]
public string Picture { get; set; }
[DataMember]
public RealEstateType Type { get; set; } //this is just an enum
public string Address { get; set; }
[DataMember]
public List<string> Images { get; set; }
public string Name { get; set; }
[DataMember]
public string Email { get; set; }
[DataMember]
public string Phone { get; set; }
[DataMember]
public string Phone2 { get; set; }
[DataMember]
public string OriginalUrl { get; set; }
[DataMember]
public string OriginalSource { get; set; }
[DataMember]
public string City { get; set; }
[DataMember]
public int ZipCode { get; set; }
[DataMember]
public string StreetAddress { get; set; }
[DataMember]
public double Longtitude { get; set; }
[DataMember]
public double Latitude { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
有关数据合同的更多信息
| 归档时间: |
|
| 查看次数: |
4864 次 |
| 最近记录: |