XML error: Value was either too large or too small for an unsigned byte
XML error: Value was either too large or too small for an unsigned byte
我对此完全陌生,这让我抓狂 - 它适用于某些数据集,但不适用于其他数据集。
编辑:看起来它与记录数有关 - 不知何故当记录数达到一定数量时 - 可能是 250 - 那是它崩溃的时候 XML。似乎以某种方式涉及自动递增的 ID 主键,因为我可以看到当 ID 列进入 400 时甚至添加 3 条记录但所有记录都被删除时它仍然产生相同的错误但是当我重置 ID 时为零 - 可以在 XML 正文中添加相同的 3 条记录并正确格式化。
映射类型:Int32 -> Byte System.Int32 -> System.Byte 目标路径:FixtureDto.ExchangeType.ExchangeType.Id.Id 源值:268
值对于无符号字节来说太大或太小。
'ObjectContent`1' 类型无法序列化内容类型 'application/xml; charset=utf-8' 的响应正文。
<Error>
<Message>An error has occurred.</Message>
<ExceptionMessage>
The 'ObjectContent`1' type failed to serialize the response body for content type 'application/xml; charset=utf-8'.
</ExceptionMessage>
<ExceptionType>System.InvalidOperationException</ExceptionType>
<StackTrace/>
<InnerException>
<Message>An error has occurred.</Message>
<ExceptionMessage>
Mapping types: Int32 -> Byte System.Int32 -> System.Byte Destination path: FixtureDto.ExchangeType.ExchangeType.Id.Id Source value: 268
</ExceptionMessage>
<ExceptionType>AutoMapper.AutoMapperMappingException</ExceptionType>
<StackTrace>
at System.Linq.Enumerable.WhereSelectListIterator`2.MoveNext() at WriteArrayOfFixtureDtoToXml(XmlWriterDelegator , Object , XmlObjectSerializerWriteContext , CollectionDataContract ) at System.Runtime.Serialization.CollectionDataContract.WriteXmlValue(XmlWriterDelegator xmlWriter, Object obj, XmlObjectSerializerWriteContext context) at System.Runtime.Serialization.XmlObjectSerializerWriteContext.WriteDataContractValue(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle declaredTypeHandle) at System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeAndVerifyType(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, Boolean verifyKnownType, RuntimeTypeHandle declaredTypeHandle, Type declaredType) at System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithXsiTypeAtTopLevel(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle originalDeclaredTypeHandle, Type graphType) at System.Runtime.Serialization.DataContractSerializer.InternalWriteObjectContent(XmlWriterDelegator writer, Object graph, DataContractResolver dataContractResolver) at System.Runtime.Serialization.DataContractSerializer.InternalWriteObject(XmlWriterDelegator writer, Object graph, DataContractResolver dataContractResolver) at System.Runtime.Serialization.XmlObjectSerializer.WriteObjectHandleExceptions(XmlWriterDelegator writer, Object graph, DataContractResolver dataContractResolver) at System.Runtime.Serialization.DataContractSerializer.WriteObject(XmlWriter writer, Object graph) at System.Net.Http.Formatting.XmlMediaTypeFormatter.WriteToStream(Type type, Object value, Stream writeStream, HttpContent content) at System.Net.Http.Formatting.XmlMediaTypeFormatter.WriteToStreamAsync(Type type, Object value, Stream writeStream, HttpContent content, TransportContext transportContext, CancellationToken cancellationToken) --- End of stack trace from previous location where exception was thrown --- 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()
</StackTrace>
<InnerException>
<Message>An error has occurred.</Message>
<ExceptionMessage>
Value was either too large or too small for an unsigned byte.
</ExceptionMessage>
<ExceptionType>System.OverflowException</ExceptionType>
<StackTrace>
at System.Convert.ToByte(Int32 value) at System.Int32.System.IConvertible.ToByte(IFormatProvider provider) at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider) at System.ComponentModel.BaseNumberConverter.ConvertTo(ITypeDescriptorContext context, CultureInfo culture, Object value, Type destinationType) at AutoMapper.Mappers.TypeConverterMapper.<>c__DisplayClass1_0.<GetConverter>b__0() at AutoMapper.Mappers.TypeConverterMapper.Map(ResolutionContext context, IMappingEngineRunner mapper) at AutoMapper.MappingEngine.AutoMapper.IMappingEngineRunner.Map(ResolutionContext context)
</StackTrace>
</InnerException>
</InnerException>
</Error>
已解决!
我已经将数据库 class 定义中的数据类型从 byte 更改为 int,但忽略了在我的等效数据传输映射对象中镜像相同的更改。
一段时间以来,这一直是一个棘手的问题,第三次尝试追根究底,上一次尝试 here and here。
最终,通过艰苦的重复测试,我意识到这与向表添加索引或错误数据或重新播种 ID 自动增量无关,而是通过数据库中的记录数量受到限制显示通过数据传输映射错误——即字节定义的ID列限制了个数。
我已将 dto 定义更改为 int 以匹配数据库,它现在可以完美地一次扩展到超过 255 条记录,正如它应该做的那样。
我对此完全陌生,这让我抓狂 - 它适用于某些数据集,但不适用于其他数据集。
编辑:看起来它与记录数有关 - 不知何故当记录数达到一定数量时 - 可能是 250 - 那是它崩溃的时候 XML。似乎以某种方式涉及自动递增的 ID 主键,因为我可以看到当 ID 列进入 400 时甚至添加 3 条记录但所有记录都被删除时它仍然产生相同的错误但是当我重置 ID 时为零 - 可以在 XML 正文中添加相同的 3 条记录并正确格式化。
映射类型:Int32 -> Byte System.Int32 -> System.Byte 目标路径:FixtureDto.ExchangeType.ExchangeType.Id.Id 源值:268
值对于无符号字节来说太大或太小。
'ObjectContent`1' 类型无法序列化内容类型 'application/xml; charset=utf-8' 的响应正文。
<Error>
<Message>An error has occurred.</Message>
<ExceptionMessage>
The 'ObjectContent`1' type failed to serialize the response body for content type 'application/xml; charset=utf-8'.
</ExceptionMessage>
<ExceptionType>System.InvalidOperationException</ExceptionType>
<StackTrace/>
<InnerException>
<Message>An error has occurred.</Message>
<ExceptionMessage>
Mapping types: Int32 -> Byte System.Int32 -> System.Byte Destination path: FixtureDto.ExchangeType.ExchangeType.Id.Id Source value: 268
</ExceptionMessage>
<ExceptionType>AutoMapper.AutoMapperMappingException</ExceptionType>
<StackTrace>
at System.Linq.Enumerable.WhereSelectListIterator`2.MoveNext() at WriteArrayOfFixtureDtoToXml(XmlWriterDelegator , Object , XmlObjectSerializerWriteContext , CollectionDataContract ) at System.Runtime.Serialization.CollectionDataContract.WriteXmlValue(XmlWriterDelegator xmlWriter, Object obj, XmlObjectSerializerWriteContext context) at System.Runtime.Serialization.XmlObjectSerializerWriteContext.WriteDataContractValue(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle declaredTypeHandle) at System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeAndVerifyType(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, Boolean verifyKnownType, RuntimeTypeHandle declaredTypeHandle, Type declaredType) at System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithXsiTypeAtTopLevel(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle originalDeclaredTypeHandle, Type graphType) at System.Runtime.Serialization.DataContractSerializer.InternalWriteObjectContent(XmlWriterDelegator writer, Object graph, DataContractResolver dataContractResolver) at System.Runtime.Serialization.DataContractSerializer.InternalWriteObject(XmlWriterDelegator writer, Object graph, DataContractResolver dataContractResolver) at System.Runtime.Serialization.XmlObjectSerializer.WriteObjectHandleExceptions(XmlWriterDelegator writer, Object graph, DataContractResolver dataContractResolver) at System.Runtime.Serialization.DataContractSerializer.WriteObject(XmlWriter writer, Object graph) at System.Net.Http.Formatting.XmlMediaTypeFormatter.WriteToStream(Type type, Object value, Stream writeStream, HttpContent content) at System.Net.Http.Formatting.XmlMediaTypeFormatter.WriteToStreamAsync(Type type, Object value, Stream writeStream, HttpContent content, TransportContext transportContext, CancellationToken cancellationToken) --- End of stack trace from previous location where exception was thrown --- 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()
</StackTrace>
<InnerException>
<Message>An error has occurred.</Message>
<ExceptionMessage>
Value was either too large or too small for an unsigned byte.
</ExceptionMessage>
<ExceptionType>System.OverflowException</ExceptionType>
<StackTrace>
at System.Convert.ToByte(Int32 value) at System.Int32.System.IConvertible.ToByte(IFormatProvider provider) at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider) at System.ComponentModel.BaseNumberConverter.ConvertTo(ITypeDescriptorContext context, CultureInfo culture, Object value, Type destinationType) at AutoMapper.Mappers.TypeConverterMapper.<>c__DisplayClass1_0.<GetConverter>b__0() at AutoMapper.Mappers.TypeConverterMapper.Map(ResolutionContext context, IMappingEngineRunner mapper) at AutoMapper.MappingEngine.AutoMapper.IMappingEngineRunner.Map(ResolutionContext context)
</StackTrace>
</InnerException>
</InnerException>
</Error>
已解决!
我已经将数据库 class 定义中的数据类型从 byte 更改为 int,但忽略了在我的等效数据传输映射对象中镜像相同的更改。
一段时间以来,这一直是一个棘手的问题,第三次尝试追根究底,上一次尝试 here and here。
最终,通过艰苦的重复测试,我意识到这与向表添加索引或错误数据或重新播种 ID 自动增量无关,而是通过数据库中的记录数量受到限制显示通过数据传输映射错误——即字节定义的ID列限制了个数。
我已将 dto 定义更改为 int 以匹配数据库,它现在可以完美地一次扩展到超过 255 条记录,正如它应该做的那样。