0

Xsd2Code を使用してクラスを生成します。ただし、クラスの 1 つがコンストラクターに問題を引き起こします。これは、ループが原因で 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");
            }
        }
    }
}
4

2 に答える 2

1

Replacesプロパティは XSD でどのように宣言されていますか? おそらくこれは必須の要素であり、ツールは契約に準拠するためにインスタンスを生成します。

次に、定義を変更してオプションにすることができます。

次のような場合:

<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>

編集:

考えられる回避策の 1 つは、バッキング プロパティを単一要素のコレクションとして持つことです。

public List<ApproverType> ReplacesWorkaround { ... }

部分クラスの別の部分で:

public ApproverType Replaces
{
 get
 {
  return ReplacesWorkaround.SingleOrDefault();
 }
 set
 {
  ReplacesWorkaround.RemoveAll();
  ReplacesWorkaround.Add(value);
 }
}
于 2014-09-17T12:03:51.240 に答える
0

問題は、このような他のクラスがあることです..明らかに、このツールには何らかのバグがあります。https://xsd2code.codeplex.com/workitem/7419

バージョン 3.4.0.32990 を使用しています。これを簡単に修正する方法はありますか

于 2014-09-17T12:16:05.530 に答える