Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检测到属性的自引用循环_C#_Json_Generics_Json.net - Fatal编程技术网

C# 检测到属性的自引用循环

C# 检测到属性的自引用循环,c#,json,generics,json.net,C#,Json,Generics,Json.net,我有一个通用类,它将对象克隆到传递的视图模型 public static TR Map<T, TR>(T model) where T : class where TR : class { if (model == null) return default(TR); var data = JsonConvert.SerializeObject(model); re

我有一个通用类,它将对象克隆到传递的视图模型

    public static TR Map<T, TR>(T model)
        where T : class
        where TR : class
    {
        if (model == null)
            return default(TR);

        var data = JsonConvert.SerializeObject(model);
        return JsonConvert.DeserializeObject<TR>(data);
    }

现在我的问题是类Category有一个虚拟的子Category列表,子Category类有一个对Category的虚拟引用。当序列化类别或子类别时,它将进入一个无限循环。我尝试过解决方案,但都忽略了虚拟参考。我需要它与虚拟属性包括序列化。有什么想法吗?

只保存子类别上的类别ID如何?您不必保存子类别上的类别引用。

可能重复的否它不是重复的,因为我需要一个答案,不只是忽略解决方案中回答的虚拟引用。这是一条Json.Net消息,处理此问题的方法有很好的文档记录,并在SO中多次回答。你有没有试过?序列化为Json是映射对象的最慢方法,另外,您需要处理发现的不必要的序列化问题。最好尝试像Automapper这样的库:类别/子类别是自我参考还是两个不同的类别?这是重复的,因为链接的答案涵盖了可用的选项。这些选项在Json.NET文档中仍然可用。您可以使用其中一个选项来克服异常,然后填写任何缺失的信息。真正的问题是您正在使用序列化来解决映射问题。序列化循环引用只能在您打破循环的情况下进行。但是,如何让类别中的子类别和子类别中的类别?@mcas您可以查询子类别getting all,其中父类别id=类别id以获取类别中的子类别。对于子类别,您在类别上有子类别列表。如果需要该类别,可以按子类别上的类别id进行搜索。