亚音速3 Newtonsoft JSON"自我引用循环异常"

1 linq json.net subsonic3

嗨,我一直在寻找我的错误,但我找不到任何帮助我的东西.问题是这个.我一直在使用Subsonic 3,Newtonsoft Json和linq写法,所以我有这个简单的查询:

var found = from client in newclients.All() where client.Period == "sometext" select client;

string periodoJSON = JsonConvert.SerializeObject(periodoFound); //this get "Self referencing loop Exception"
Run Code Online (Sandbox Code Playgroud)

问题是,当我运行这个脚本时,我在JsonConvert行中得到了可怕的异常"Self referening loop exception",亚音速有所有对象没有任何问题,但是如果我做了以下操作.

var found = from client in newclients.All() where client.Period == "sometext" select new client{client.Name, client.LastName, etc};

string periodoJSON = JsonConvert.SerializeObject(periodoFound);
Run Code Online (Sandbox Code Playgroud)

我得到对象序列化与所有属性的任何问题.我正在做最后一种方式,因为我必须完成我的工作,但是对于这个问题是任何其他方式或解决方案,如果不是我每次想要获得完整的表属性时都必须编写所有属性.

希望任何可以解决我的问题o帮助我找到解决方案的路径....


我有一个真正基本的查询与linq和我尝试三个值的JsonSerializerSettings和任何工作,再次我正在使用亚音速3这不会发生subnoic 2我可以让它工作,如果我逐个指定linq查询中对象的属性是否有任何关于发生了什么的线索,任何更多的帮助将是伟大的!如果我把Serialize我的页面的值变得疯狂并处于无限循环状态,如果我决定错误简单不起作用而忽略什么都没有发生...关于这个自我引用循环的更多信息?

var u = usuario.SingleOrDefault(x => x.TipoUsuario == "A" || x.TipoUsuario == "W");
JsonSerializerSettings setting = new JsonSerializerSettings();
setting.ReferenceLoopHandling = ReferenceLoopHandling.Error; //.Serialize .Ignore

Page.ClientScript.RegisterClientScriptBlock(this.GetType(),"usuario", "var usuario=" + JsonConvert.SerializeObject(u, Formatting.None, setting) + ";");
Run Code Online (Sandbox Code Playgroud)

更新------

我编写以下代码

string jsU = JsonConvert.SerializeObject(u,Formatting.None,new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.Objects, ReferenceLoopHandling = ReferenceLoopHandling.Ignore });
Run Code Online (Sandbox Code Playgroud)

并且是工作,但唯一的错误是在json对象中有关于亚音速3的列的所有信息和大块文本解释它...有没有人知道如何不发送这部分对象?

Eni*_*ity 5

如果不了解你的对象模型,很难提供明确的答案,但我会看一下ReferenceLoopHandlingenum.

你打电话string SerializeObject(object value)JsonConvert.请尝试使用该string SerializeObject(object value, Formatting formatting, JsonSerializerSettings settings)方法.该JsonSerializerSettings settings参数允许您设置一系列内容,包括ReferenceLoopHandling ReferenceLoopHandling { get; set; }属性.

您可以尝试以下值:

public enum ReferenceLoopHandling
{
    Error,
    Ignore,
    Serialize
}
Run Code Online (Sandbox Code Playgroud)

显然,这Error是默认的,这就是你得到的.也许其中一个会有所帮助.