gpt4 book ai didi

从 Angularjs 服务调用时,WebApi 中延迟加载的 nHibernate 对象出现 JsonSerializationException

转载 作者:行者123 更新时间:2023-12-02 20:30:55 26 4
gpt4 key购买 nike

我正在从 Angularjs 服务调用 WebApi Controller Get 方法。

angular.service :

app.service('MyService', ['$http', function ($http) {

var getMyObjects = function () {
var myObjects;
var promise = $http.get('/api/objects/').success(function (data) {
myObjects = data;
}).error(function (data, status, headers, config) {

});

return promise;
};

return {
myObjects: myObjects
};
}]);

WebApi 获取方法:

public class ObjectsController : ApiController
{
public IEnumerable<MyObject> Get()
{
return _objectRepository.GetAll().ToArray();
}
}

我在客户端收到 500 服务器错误,其内部异常是:

ExceptionMessage: "Error getting value from 'IdentityEqualityComparer' on 
'NHibernate.Proxy.DefaultLazyInitializer'."
ExceptionType: "Newtonsoft.Json.JsonSerializationException"

我应该怎么做才能解决这个问题?

编辑:我通过按照 this answer 将以下一行添加到 WebApiConfig.cs 解决了上述异常。 :

((DefaultContractResolver)config.Formatters.JsonFormatter.SerializerSettings.
ContractResolver).IgnoreSerializableAttribute = true;

现在我有这个异常(exception):

ExceptionMessage: "Error getting value from 'DefaultValue'
on 'NHibernate.Type.DateTimeOffsetType'."
ExceptionType: "Newtonsoft.Json.JsonSerializationException"

有什么想法可以解决这个问题吗?

最佳答案

基于this answerthis answer ,我通过添加以下类解决了该问题

public class NHibernateContractResolver : DefaultContractResolver
{
protected override JsonContract CreateContract(Type objectType)
{
if (typeof(NHibernate.Proxy.INHibernateProxy).IsAssignableFrom(objectType))
return base.CreateContract(objectType.BaseType);

return base.CreateContract(objectType);
}
}

然后将其设置为 Global.asax.cs 中的 Application_Start 中的合约解析器:

GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings
.ContractResolver = new NHibernateContractResolver();

关于从 Angularjs 服务调用时,WebApi 中延迟加载的 nHibernate 对象出现 JsonSerializationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25011406/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com