Dec*_*lty 5 nhibernate json asp.net-web-api angularjs
我从Angularjs服务调用WebApi控制器Get方法.
角度服务:
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
};
}]);
Run Code Online (Sandbox Code Playgroud)
WebApi Get方法:
public class ObjectsController : ApiController
{
public IEnumerable<MyObject> Get()
{
return _objectRepository.GetAll().ToArray();
}
}
Run Code Online (Sandbox Code Playgroud)
我500 server error在客户端获得了一个,其内部例外是:
ExceptionMessage: "Error getting value from 'IdentityEqualityComparer' on
'NHibernate.Proxy.DefaultLazyInitializer'."
ExceptionType: "Newtonsoft.Json.JsonSerializationException"
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能解决这个问题?
编辑:
我通过添加以下一个班轮来解决上述异常,WebApiConfig.cs根据这个答案:
((DefaultContractResolver)config.Formatters.JsonFormatter.SerializerSettings.
ContractResolver).IgnoreSerializableAttribute = true;
Run Code Online (Sandbox Code Playgroud)
现在我有这个例外:
ExceptionMessage: "Error getting value from 'DefaultValue'
on 'NHibernate.Type.DateTimeOffsetType'."
ExceptionType: "Newtonsoft.Json.JsonSerializationException"
Run Code Online (Sandbox Code Playgroud)
关于是否有类似的东西的任何想法,我可以做到解决这个问题?
Dec*_*lty 11
基于这个答案和这个答案,我已经通过添加以下类来解决了这个问题
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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后将其设置为在合同解析器Application_Start中Global.asax.cs:
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings
.ContractResolver = new NHibernateContractResolver();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4411 次 |
| 最近记录: |