Asp.net web api 带web API的Sitecore Glass映射器

Asp.net web api 带web API的Sitecore Glass映射器,asp.net-web-api,json.net,sitecore,glass-mapper,Asp.net Web Api,Json.net,Sitecore,Glass Mapper,我仅在live server上收到以下错误,当使用WebApi调用函数时,我使用的是Sitecore glass mapper { "$id": "1", "Message": "An error has occurred.", "ExceptionMessage": "The 'ObjectContent`1' type failed to serialize the response body for content type 'application/json; c

我仅在live server上收到以下错误,当使用WebApi调用函数时,我使用的是Sitecore glass mapper

{
    "$id": "1",
    "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": {
        "$id": "2",
        "Message": "An error has occurred.",
        "ExceptionMessage": "Error getting value from 'proxyGenerationOptions' on 'Castle.Proxies.BaseItemProxy'.",
        "ExceptionType": "Newtonsoft.Json.JsonSerializationException",
        "StackTrace": " at Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(Object target)\r\n at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.CalculatePropertyValues(JsonWriter writer, Object value, JsonContainerContract contract, JsonProperty member, JsonProperty property, JsonContract& memberContract, Object& memberValue)\r\n at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)\r\n at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeList(JsonWriter writer, IWrappedCollection values, JsonArrayContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)\r\n at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)\r\n at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeList(JsonWriter writer, IWrappedCollection values, JsonArrayContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)\r\n at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(JsonWriter jsonWriter, Object value)\r\n at Newtonsoft.Json.JsonSerializer.SerializeInternal(JsonWriter jsonWriter, Object value)\r\n at System.Net.Http.Formatting.JsonMediaTypeFormatter.<>c__DisplayClassd.b__c()\r\n at System.Threading.Tasks.TaskHelpers.RunSynchronously(Action action, CancellationToken token)",
        "InnerException": {
            "$id": "3",
            "Message": "An error has occurred.",
            "ExceptionMessage": "Common Language Runtime detected an invalid program.",
            "ExceptionType": "System.InvalidProgramException",
            "StackTrace": " at GetproxyGenerationOptions(Object )\r\n at Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(Object target)"
        }
    }
}
{
“$id”:“1”,
“消息”:“发生错误。”,
“ExceptionMessage”:“ObjectContent'1'类型未能序列化内容类型'application/json;charset=utf-8'的响应正文。”,
“异常类型”:“System.InvalidOperationException”,
“StackTrace”:空,
“内部异常”:{
“$id”:“2”,
“消息”:“发生错误。”,
“ExceptionMessage”:“从'Castle.Proxies.BaseItemProxy'上的'proxyGenerationOptions'获取值时出错。”,
“ExceptionType”:“Newtonsoft.Json.JsonSerializationException”,
“StackTrace”:“位于Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(对象目标)\r\n位于Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.CalculatePropertyValues(JsonWriter编写器、对象值、JsonContainerContract、JsonProperty成员、JsonProperty属性、JsonContract和memberContract、对象和memberValue)\r\n位于Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter编写器、对象值、JsonObjectContract契约、JsonProperty成员、JsonContainerContract集合契约、JsonProperty容器属性)\r\n位于Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeList(JsonWriter编写器、IWRAPPED集合值、JsonArrayContract合约、JsonProperty成员、JsonContainerContract集合合约、JsonProperty容器属性)\r\n位于Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter编写器,对象值,JsonObjectContract,JsonProperty成员,JsonContainerContract collectionContract,JsonProperty containerProperty)\r\n位于Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeList(JsonWriter-writer,IwrapedCollection-values,JsonArrayContract-contract,JsonProperty成员,JsonContainerContract-collectionContract,JsonProperty-containerProperty)\r\n位于Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(JsonWriter-JsonWriter,对象值)\r\n位于Newtonsoft.Json.JsonSerializer.Serializer\n(JsonWriter JsonWriter,对象值)\r\n位于System.Net.Http.Formatting.JsonMediaTypeFormatter.c_uuDisplayClassD.b_uC()\r\n位于System.Threading.Tasks.TaskHelpers.RunSynchronously(操作,取消令牌)”,
“内部异常”:{
“$id”:“3”,
“消息”:“发生错误。”,
“ExceptionMessage”:“公共语言运行库检测到无效程序。”,
“异常类型”:“System.InvalidProgrameException”,
StackTrace:“位于GetproxyGenerationOptions(对象)\r\n位于Newtonsoft.Json.Serialization.DynamicValue Provider.GetValue(对象目标)”
}
}
}

您的BaseItem导致了一些问题,如果您不需要任何BaseItem类型的属性,请执行以下操作:

1-为Json契约解析器创建新类

public class JsonContractResolver : DefaultContractResolver
{
public JsonContractResolver():base()
{

}
protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
{
    IList<JsonProperty> filtered = new List<JsonProperty>();

    foreach (JsonProperty p in base.CreateProperties(type, memberSerialization))
     {
        if (p.PropertyType != typeof(BaseItem))
          filtered.Add(p);

         return filtered;
     } 
}
}
公共类JsonContractResolver:DefaultContractResolver
{
公共JsonContractResolver():base()
{
}
受保护的重写IList CreateProperties(类型类型,MemberSerialization MemberSerialization)
{
IList filtered=新列表();
foreach(base.CreateProperties(类型,memberSerialization)中的JsonProperty p)
{
if(p.PropertyType!=typeof(BaseItem))
过滤。添加(p);
返回过滤;
} 
}
}
2-在路由配置设置中添加此代码

var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().First();
jsonFormatter.SerializerSettings.ContractResolver = new JsonContractResolver();
var jsonFormatter=config.Formatters.OfType().First();
jsonFormatter.SerializerSettings.ContractResolver=新的JsonContractResolver();

您的BaseItem导致了一些问题,如果您不需要任何BaseItem类型的属性,请执行以下操作:

1-为Json契约解析器创建新类

public class JsonContractResolver : DefaultContractResolver
{
public JsonContractResolver():base()
{

}
protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
{
    IList<JsonProperty> filtered = new List<JsonProperty>();

    foreach (JsonProperty p in base.CreateProperties(type, memberSerialization))
     {
        if (p.PropertyType != typeof(BaseItem))
          filtered.Add(p);

         return filtered;
     } 
}
}
公共类JsonContractResolver:DefaultContractResolver
{
公共JsonContractResolver():base()
{
}
受保护的重写IList CreateProperties(类型类型,MemberSerialization MemberSerialization)
{
IList filtered=新列表();
foreach(base.CreateProperties(类型,memberSerialization)中的JsonProperty p)
{
if(p.PropertyType!=typeof(BaseItem))
过滤。添加(p);
返回过滤;
} 
}
}
2-在路由配置设置中添加此代码

var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().First();
jsonFormatter.SerializerSettings.ContractResolver = new JsonContractResolver();
var jsonFormatter=config.Formatters.OfType().First();
jsonFormatter.SerializerSettings.ContractResolver=新的JsonContractResolver();

您的BaseItem导致了一些问题,如果您不需要任何BaseItem类型的属性,请执行以下操作:

1-为Json契约解析器创建新类

public class JsonContractResolver : DefaultContractResolver
{
public JsonContractResolver():base()
{

}
protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
{
    IList<JsonProperty> filtered = new List<JsonProperty>();

    foreach (JsonProperty p in base.CreateProperties(type, memberSerialization))
     {
        if (p.PropertyType != typeof(BaseItem))
          filtered.Add(p);

         return filtered;
     } 
}
}
公共类JsonContractResolver:DefaultContractResolver
{
公共JsonContractResolver():base()
{
}
受保护的重写IList CreateProperties(类型类型,MemberSerialization MemberSerialization)
{
IList filtered=新列表();
foreach(base.CreateProperties(类型,memberSerialization)中的JsonProperty p)
{
if(p.PropertyType!=typeof(BaseItem))
过滤。添加(p);
返回过滤;
} 
}
}
2-在路由配置设置中添加此代码

var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().First();
jsonFormatter.SerializerSettings.ContractResolver = new JsonContractResolver();
var jsonFormatter=config.Formatters.OfType().First();
jsonFormatter.SerializerSettings.ContractResolver=新的JsonContractResolver();

您的BaseItem导致了一些问题,如果您不需要任何BaseItem类型的属性,请执行以下操作:

1-为Json契约解析器创建新类

public class JsonContractResolver : DefaultContractResolver
{
public JsonContractResolver():base()
{

}
protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
{
    IList<JsonProperty> filtered = new List<JsonProperty>();

    foreach (JsonProperty p in base.CreateProperties(type, memberSerialization))
     {
        if (p.PropertyType != typeof(BaseItem))
          filtered.Add(p);

         return filtered;
     } 
}
}
公共类JsonContractResolver:DefaultContractResolver
{
公共JsonContractResolver():base()
{
}
受保护的重写IList CreateProperties(类型类型,MemberSerialization MemberSerialization)
{
IList filtered=新列表();
foreach(base.CreateProperties(类型,memberSerialization)中的JsonProperty p)
{
if(p.PropertyType!=typeof(BaseItem))
过滤。添加(p);
返回过滤;
} 
}
}
2-将此代码添加到