Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.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#_Xml_Constructor_Deserialization_Xsd2code - Fatal编程技术网

C# 反序列化时初始化构造函数内的属性

C# 反序列化时初始化构造函数内的属性,c#,xml,constructor,deserialization,xsd2code,C#,Xml,Constructor,Deserialization,Xsd2code,我使用XSD2代码生成类。然而,其中一个类导致其构造函数出现问题,因为循环和抛出StackOverflowException [System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")] [System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = true)] public partial class ApproverTyp

我使用XSD2代码生成类。然而,其中一个类导致其构造函数出现问题,因为循环和抛出StackOverflowException

[System.CodeDom.Compiler.GeneratedCodeAttribute("Xsd2Code", "3.4.0.32990")]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = true)]
public partial class ApproverType : INotifyPropertyChanged
{
    private ApproverType replacesField;

    public ApproverType()
    {
        this.replacesField = new ApproverType();
    }

    public ApproverType Replaces
    {
        get
        {
            return this.replacesField;
        }
        set
        {
            if ((this.replacesField != null))
            {
                if ((replacesField.Equals(value) != true))
                {
                    this.replacesField = value;
                    this.OnPropertyChanged("Replaces");
                }
            }
            else
            {
                this.replacesField = value;
                this.OnPropertyChanged("Replaces");
            }
        }
    }
}

如何在XSD中定义
替换
属性?可能这是一个必需的元素,该工具会生成一个实例来遵守契约

然后,您可以尝试更改定义,使其成为可选的

如果是这样的话:

<xs:element name="Replaces" type="ApproverType" use="required" />

问题是还有其他类似的课程。。显然,这个工具有点问题


我使用的是3.4.0.32990版。有没有办法解决这个问题,很容易

这是一个无限循环是的,你已经创建了一个无限递归循环,当调用构造函数时,它会调用自己,因为它创建了类的另一个实例并将其分配给replacesField,该操作将一直持续到您销毁堆栈为止。如何防止此行为?删除此操作。replacesField=new ApproverType();在Constructor中,通过使用单个项目的集合发布了一个具有变通方法的更新,您应该更新原始问题,而不是用另一个问题回答您自己的问题
<xs:element name="Replaces" type="ApproverType" use="optional" />
<ApproverType>
 <Replaces>
   <Replaces>
     <Replaces>
       <Replaces>
        ... infinite
 <Replaces>
 <OtherProperty />
<ApproverType>
public List<ApproverType> ReplacesWorkaround { ... }
public ApproverType Replaces
{
 get
 {
  return ReplacesWorkaround.SingleOrDefault();
 }
 set
 {
  ReplacesWorkaround.RemoveAll();
  ReplacesWorkaround.Add(value);
 }
}