我使用Xsd2Code生成类。但是其中一个类导致我的构造函数出现问题,因为循环并抛出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");
}
}
}
}
答案 0 :(得分:1)
您的XSD中如何Replaces
属性?可能它是必需的元素,并且该工具生成符合合同的实例。
然后,您可以尝试更改定义,使其成为可选项。
如果是这样的话:
<xs:element name="Replaces" type="ApproverType" use="required" />
然后您必须将其更改为:
<xs:element name="Replaces" type="ApproverType" use="optional" />
编辑: 无论如何,方案都是不正确的,因为在xml中也不可能使用递归的必需元素:
<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);
}
}
答案 1 :(得分:0)
问题是还有其他类这样的..显然这个工具有点儿错误。 https://xsd2code.codeplex.com/workitem/7419
我使用的是3.4.0.32990版。有没有办法解决这个问题,很容易