【发布时间】:2021-01-31 03:22:28
【问题描述】:
我似乎无法弄清楚为什么方法“有时”会导致这个空引用异常。我在我的本地主机上运行代码,当它出现在某些用户身上时它工作正常。当我重新启动站点时,它也会在服务器上消失。
我的问题是如何调试它?它采用 .NET 对象并尝试对其进行序列化,但我无法确定是哪个属性导致了此问题。
方法
public static string ToJSON(this object o)
{
return JsonConvert.SerializeObject(o, new JsonSerializerSettings
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
});
}
例外
at System.Text.StringBuilder.Append(Char value)
at Newtonsoft.Json.JsonTextWriter.WriteEnd(JsonToken token)
at Newtonsoft.Json.JsonWriter.AutoCompleteClose(JsonContainerType type)
at Newtonsoft.Json.JsonWriter.WriteEndObject()
at Newtonsoft.Json.JsonWriter.WriteEnd(JsonContainerType type)
at Newtonsoft.Json.JsonWriter.AutoCompleteAll()
at Newtonsoft.Json.JsonTextWriter.Close()
at Newtonsoft.Json.JsonWriter.Dispose(Boolean disposing)
at Newtonsoft.Json.JsonWriter.System.IDisposable.Dispose()
at Newtonsoft.Json.JsonConvert.SerializeObjectInternal(Object value, Type type, JsonSerializer jsonSerializer)
at Newtonsoft.Json.JsonConvert.SerializeObject(Object value, JsonSerializerSettings settings)
at Tournaments.Common.Extensions.ObjectExtensions.ToJSON(Object o)
尝试/抓住
我尝试了以下,JavascriptSerializer 抛出错误 A circular reference was detected while serializing an object of type 'Tournaments.Models.Events.EventModel'. 但是我不知道哪个对象有这个 EventModel,它可能是多个。
<script type="text/javascript">
@{
string model = null;
try
{
model = Model.Designer.ToJSON();
}
catch (Exception ex )
{
model = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(Model.Designer);
}
}
app.viewModel.members.bracket.init(@Html.Raw(model));
</script>
【问题讨论】:
-
你正在序列化的
o是什么类型的对象,它的价值是什么?您应该注销此信息以获取有关问题所在的线索。 -
很多属性和复杂对象的列表
-
记录是一个很好的方法——甚至在 ToJSON() 中添加一个 try/catch 并在 catch 上设置一个断点;查看导致问题的对象的示例会很有帮助,即使还有其他对象也是如此。
标签: c# .net serialization json.net nullreferenceexception