C# 反序列化时初始化构造函数内的属性
我使用XSD2代码生成类。然而,其中一个类导致其构造函数出现问题,因为循环和抛出StackOverflowExceptionC# 反序列化时初始化构造函数内的属性,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
[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);
}
}