Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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# XML序列化对象时出错_C#_Xml Serialization - Fatal编程技术网

C# XML序列化对象时出错

C# XML序列化对象时出错,c#,xml-serialization,C#,Xml Serialization,我认为我的类符合所有XML序列化要求。下面是错误消息的一部分 InnerException:System.InvalidOperationException HResult=-2146233079 Message=序列化UseandTheMinotaur.LevelDesigner.ModelMap类型的对象时检测到循环引用。 Source=System.Xml 堆栈跟踪: 位于System.Xml.Serialization.XmlSerializationWriter.WriteStarEl

我认为我的类符合所有XML序列化要求。下面是错误消息的一部分

InnerException:System.InvalidOperationException HResult=-2146233079 Message=序列化UseandTheMinotaur.LevelDesigner.ModelMap类型的对象时检测到循环引用。 Source=System.Xml 堆栈跟踪: 位于System.Xml.Serialization.XmlSerializationWriter.WriteStarElement(字符串名称、字符串ns、对象o、布尔writePrefixed、XmlSerializationNamespaces xmlns) 在Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterModelMap.Write4U ModelMap(字符串n、字符串ns、ModelMap o、布尔值isNullable、布尔值needType) 在Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterModelMap.Write3_单元格(字符串n、字符串ns、单元格o、布尔值可为空、布尔值需要类型) 在Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterModelMap.Write4U ModelMap(字符串n、字符串ns、ModelMap o、布尔值isNullable、布尔值needType) 在Microsoft.Xml.Serialization.GenerateAssembly.XmlSerializationWriterModelMap.Write5_ModelMap(对象o)中 内部异常:


这是错误吗?:Message=序列化类型为TheseSusandTheminotaur.LevelDesigner.ModelMap的对象时检测到循环引用。在我的数据模型中,如果您愿意,我可以在这里发布,我有一个包含单元格列表的映射,每个单元格都知道map类型的“myMap”。这是否会导致循环错误(循环)

我没有向代码中添加任何属性,因为我知道它是否符合我不需要的XML序列化要求

数据模型:

    public class ModelMap
    {
        public ModelMap()
        {
        }

        public int rows { get; set; }
        public int cols { get; set; }
        public int boardXPos { get; set; }
        public int boardYPos { get; set; }
        public int myCellSize { get; set; }
        public string HorizontalWallSource { get; set; }
        public string VerticalWallSource { get; set; }
        public string cellBgSource { get; set; }
        public string theseusSource { get; set; }
        public string minotaurSource { get; set; }
        public string exitSource { get; set; }
        public int myWidth { get; set; }
        public int myHeight { get; set; }
        private List<Cell> m_cells = new List<Cell>();
        public List<Cell> myCells
        {
            get
            {
                return m_cells;
            }
            set
            {
                m_cells = value;
            }
        }
    }
}
我的序列化代码:

private void btnSaveMap_Click(object sender, RoutedEventArgs e)
{
    XmlSerializer mySerializer = new
    XmlSerializer(typeof(ModelMap));

    ModelMap map = this.myMapController.myMap;

    using (var writer = new StreamWriter(@"c:\xml\test.xml"))
    {
        mySerializer.Serialize(writer, map);
    }

谢谢

看起来您有这样一个循环引用:

ModelMap.myCells
->(遍历
List
)->
Cell.myMap
->
ModelMap

如果两个
ModelMap
s都引用同一个实例,那么序列化将永远循环

这很好地解释了您的情况,并解释了一些解决方案


如果在此“循环”上按Ctrl-F键,则可以看到一个通用的XML结构,用于支持使用XML元素上的
id
ref
属性的重复对象实例;这对于将文件反序列化回同一对象图是至关重要的。

看起来您有这样一个循环引用:

ModelMap.myCells
->(遍历
List
)->
Cell.myMap
->
ModelMap

如果两个
ModelMap
s都引用同一个实例,那么序列化将永远循环

这很好地解释了您的情况,并解释了一些解决方案


如果在此“循环”上按Ctrl-F键,则可以看到一个通用的XML结构,用于支持使用XML元素上的
id
ref
属性的重复对象实例;这对于将文件反序列化回同一对象图是至关重要的。

看起来您有这样一个循环引用:

ModelMap.myCells
->(遍历
List
)->
Cell.myMap
->
ModelMap

如果两个
ModelMap
s都引用同一个实例,那么序列化将永远循环

这很好地解释了您的情况,并解释了一些解决方案


如果在此“循环”上按Ctrl-F键,则可以看到一个通用的XML结构,用于支持使用XML元素上的
id
ref
属性的重复对象实例;这对于将文件反序列化回同一对象图是至关重要的。

看起来您有这样一个循环引用:

ModelMap.myCells
->(遍历
List
)->
Cell.myMap
->
ModelMap

如果两个
ModelMap
s都引用同一个实例,那么序列化将永远循环

这很好地解释了您的情况,并解释了一些解决方案


如果在此“循环”上按Ctrl-F键,则可以看到一个通用的XML结构,用于支持使用XML元素上的
id
ref
属性的重复对象实例;这对于将文件反序列化回同一对象图至关重要。

“如果您愿意,我可以在这里发布我的数据模型”-我们喜欢…XMLSerializer不能很好地处理循环引用。您可能需要改用
SoapFormatter
。@DStanley谢谢,我已经发布了数据模型:)“如果您愿意,我可以在这里发布我的数据模型”-我们喜欢…XMLSerializer不能很好地处理循环引用。您可能需要改用
SoapFormatter
。@DStanley谢谢,我已经发布了数据模型:)“如果您愿意,我可以在这里发布我的数据模型”-我们喜欢…XMLSerializer不能很好地处理循环引用。您可能需要改用
SoapFormatter
。@DStanley谢谢,我已经发布了数据模型:)“如果您愿意,我可以在这里发布我的数据模型”-我们喜欢…XMLSerializer不能很好地处理循环引用。您可能需要改用
SoapFormatter
。@DStanley谢谢,我已经发布了数据模型:)谢谢!我已经使用BinaryFormatter进行了序列化,它似乎已经工作了。不过,我也会研究这个解决方案谢谢!我已经使用BinaryFormatter进行了序列化,它似乎已经工作了。不过,我也会研究这个解决方案谢谢!我已经使用BinaryFormatter进行了序列化,它似乎已经工作了。不过,我也会研究这个解决方案谢谢!我已经使用BinaryFormatter进行了序列化,它似乎已经工作了。然而,我也将研究这个解决方案
private void btnSaveMap_Click(object sender, RoutedEventArgs e)
{
    XmlSerializer mySerializer = new
    XmlSerializer(typeof(ModelMap));

    ModelMap map = this.myMapController.myMap;

    using (var writer = new StreamWriter(@"c:\xml\test.xml"))
    {
        mySerializer.Serialize(writer, map);
    }