我正在尝试运行RavenDB转换,但我遇到了以下异常:
Raven.Imports.Newtonsoft.Json.JsonSerializationException:无法读取属性值:Id ---> System.FormatException:输入字符串的格式不正确 .
我认为这是因为我的模型使用整数ID而不是字符串 . 如何让转换与int一起使用?
DiscountCode_ViewModel.cs
public class DiscountCode_ViewModel : AbstractTransformerCreationTask<DiscountCode>
{
public DiscountCode_ViewModel()
{
TransformResults = discounts => discounts
.Select(discount => new SimpleDiscountCode
{
// Throws an exception here
Id = discount.Id,
MerchantId = discount.MerchantId,
TermsAndConditions = discount.TermsAndConditions,
Code = discount.Code,
Description = discount.Description
});
}
}
DiscountCode.cs
public class DiscountCode
{
public int Id { get; set; }
public int MerchantId { get; set; }
public string Description { get; set; }
public string Code { get; set; }
public string TermsAndConditions { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public int SortOrder { get; set; }
// a bunch more properties...
}
SimpleDiscountCode.cs
public class SimpleDiscountCode
{
public int Id { get; set; }
public int MerchantId { get; set; }
public string Title { get; set; }
public string Code { get; set; }
public string TermsAndConditions { get; set; }
}
DiscountCode_ByMerchantId.cs
public class DiscountCodes_ByMerchantId : AbstractIndexCreationTask<DiscountCode>
{
public DiscountCodes_ByMerchantId()
{
Map = discounts => discounts
.Select(discount => new
{
discount.MerchantId,
discount.StartDate,
discount.EndDate,
discount.SortOrder
});
Sort(x => x.SortOrder, SortOptions.Int);
}
}
Query.cs
var discounts = await session
.Query<DiscountCode, DiscountCodes_ByMerchantId>()
.Include<DiscountCode, Merchant>(d => d.MerchantId)
.Where(x => x.MerchantId == id)
.Where(x => x.StartDate <= DateTime.Now && x.EndDate >= DateTime.Now)
.OrderBy(x => x.SortOrder)
.TransformWith<DiscountCode_ViewModel, SimpleDiscountCode>()
.ToListAsync();
var merchant = await session.LoadAsync<Merchant>(id);
堆栈跟踪
Raven.Imports.Newtonsoft.Json.JsonSerializationException发生HResult = -2146233088 Message =无法读取属性值:Id Source = Raven.Abstractions StackTrace:at Raven.Imports.Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader阅读器,JsonObjectContract Contract ,JsonProperty成员,String id)在C:\ Builds \ RavenDB-Stable-3.5 \ Imports \ Newtonsoft.Json \ Src \ Newtonsoft.Json \ Serialization \ JsonSerializerInternalReader.cs:2015年在Raven.Imports.Newtonsoft Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader,Type objectType,JsonContract contract,JsonProperty成员,JsonContainerContract containerContract,JsonProperty containerMember,Object existingValue)在C:\ Builds \ RavenDB-Stable-3.5 \ Imports \ Newtonsoft.Json \ Src \ Newtonsoft.Json \ Serialization \ JsonSerializerInternalReader.cs:Raven.Imports.Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader,Type ob)第434行jectType,Boolean checkAdditionalContent)在C:\ Builds \ RavenDB-Stable-3.5 \ Imports \ Newtonsoft.Json \ Src \ Newtonsoft.Json \ Serialization \ JsonSerializerInternalReader.cs:第180行在Raven.Imports.Newtonsoft.Json.JsonSerializer.DeserializeInternal( JsonReader reader,Type objectType)在C:\ Builds \ RavenDB-Stable-3.5 \ Imports \ Newtonsoft.Json \ Src \ Newtonsoft.Json \ JsonSerializer.cs:第732行在Raven.Client.Document.SessionOperations.QueryOperation.DeserializedResult [T ](RavenJObject结果)在C:\ Builds \ RavenDB-Stable-3.5 \ Raven.Client.Lightweight \ Document \ SessionOperations \ QueryOperation.cs:Raven.Client.Document.SessionOperations.QueryOperation.Deserialize [T]中的第262行(RavenJObject)结果)在C:\ Builds \ RavenDB-Stable-3.5 \ Raven.Client.Lightweight \ Document \ SessionOperations \ QueryOperation.cs:第190行Raven.Client.Document.SessionOperations.QueryOperation.b__26_0 [T](RavenJObject x)in C:\ Builds \ RavenDB-Stable-3.5 \ Raven.Client.Lightweight \ Document \ SessionOperations \ QueryOperation.cs:Syst第139行位于C:\ Builds \ RavenDB-Stable-3.5 \ Raven.Client.Lightweight \ Document \ SessionOperations中的Raven.Client.Document.SessionOperations.QueryOperation.Complete [T]()中的em.Linq.Enumerable.SelectListIterator2.ToList() QueryOperation.cs:位于C:\ Builds \ RavenDB-Stable-3.5 \ Raven.Client.Lightweight \ Document \ AsyncDocumentQuery.cs中的Raven.Client.Document.AsyncDocumentQuery1.d__118.MoveNext()的第138行:第1230行---结束来自抛出异常的先前位置的堆栈跟踪---在Raven.Client.Document.AsyncDocumentQuery1的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)的System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)处 . <ToListAsync> d _110.MoveNext()在C:\ Builds \ RavenDB-Stable-3.5 \ Raven.Client.Lightweight \ Document \ AsyncDocumentQuery.cs:第1157行---从先前位置抛出异常的堆栈跟踪结束 - - System.Runtime.CompilerSe上的System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) System.Runtime.CompilerServices.TaskAwaiter1.GetResult()中的rvices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)位于C:\ GitCode \ TCB.MerchantService \ src \ TCB.MerchantService中的TCB.MerchantService.Data.MerchantRepository.d__3.MoveNext() .Data \ MerchantRepository.cs:第64行InnerException:HResult = -2146233033 Message =输入字符串的格式不正确 . Source = System.Private.CoreLib StackTrace:System.Number.StringToNumber(String str,NumberStyles options,NumberBuffer&number,NumberFormatInfo info,Boolean parseDecimal),位于System的System.Number.ParseInt32(String s,NumberStyles style,NumberFormatInfo info) . System.Convert.ChangeType(Object value,Type conversionType,IFormatProvider provider)中的String.System.IConvertible.ToInt32(IFormatProvider提供程序),位于Raven.Abstractions.Json.JsonNumericConverter`1.ReadJson(JsonReader reader,Type objectType,Object existingValue,JsonSerializer)序列化程序)在C:\ Builds \ RavenDB-Stable-3.5 \ Raven.Abstractions \ Json \ JsonNumericConverter.cs:第36行在Raven.Imports.Newtonsoft.Json.Serialization.JsonSerializerInternalReader.DeserializeConvertable(JsonConverter转换器,JsonReader读取器,Type objectType,对象existingValue)在C:\ Builds \ RavenDB-Stable-3.5 \ Imports \ Newtonsoft.Json \ Src \ Newtonsoft.Json \ Serialization \ JsonSerializerInternalReader.cs:line 1769 at at在C:\ Builds \ RavenDB-Stable-3.5 \ Imports \ Newtonsoft.Json中的Raven.Imports.Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty属性,JsonConverter propertyConverter,JsonContainerContract containerContract,JsonProperty containerProperty,JsonReader reader,Object target) Src \ Newtonsoft.Json \ Serialization \ JsonSerializerInternalReader.cs:C:\ Builds \中Raven.Imports.Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject,JsonReader reader,JsonObjectContract contract,JsonProperty member,String id)的第900行RavenDB-Stable-3.5 \ Imports \ Newtonsoft.Json \ Src \ Newtonsoft.Json \ Serialization \ JsonSerializerInternalReader.cs:line 2005 InnerException:
小提琴请求
POST /查询HTTP / 1.1主机:localhost:8080连接:keep-alive内容长度:16接受:application / json,text / javascript,/; q = 0.01原产地:http:// localhost:8080 X-Requested-With:XMLHttpRequest User-Agent:Mozilla / 5.0(Windows NT 10.0; WOW64)AppleWebKit / 537.36(KHTML,类似Gecko)Chrome / 57.0.2987.133 Safari / 537.36 Content-Type:application / json; charset = UTF-8 Referer:http:// localhost:8080 / studio / index.html Accept-Encoding:gzip,deflate,br Accept-Language:en-US,en; q = 0.8 Cookie:_ga = GA1.1.1952671077 . 1488191167