我正在尝试运行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