XML を使用可能なオブジェクト グラフに逆シリアル化しようとしています。私たちのシステムでオブジェクト構造を生成できるツールができるようになるまでにはしばらく時間がかかるので、できるだけ人間が XML を書き込めるようにしたいと考えています。
私が探しているのは、このような XML です
<RuleSet>
  <Conditions>
    <AttributeEqualTo>
      <Id>C1</Id>
      <AttributeName>Foo</AttributeName>
      <ExpectedValue>Bar</ExpectedValue>
    </AttributeEqualTo>
    <AttributeNotEqualTo>
      <Id>C2</Id>
      <AttributeName>Blah</AttributeName>
      <ExpectedValue>Value</ExpectedValue>
    </AttributeNotEqualTo>
  </Conditions>
  <States>
    <State>
      <Id>Start</Id>
      <Transitions>
        <Transition>
            <Condition>C1</Condition>
            <State>S1</State>
        </Transition>
        <Transition>
            <Condition>C2</Condition>
            <State>S2</State>
        </Transition>
      </Transitions>
    </State>
    <State>
      <Id>S1</Id>
      <Transitions>
        <Transition>
            <Condition>C2</Condition>
            <State>S2</State>
        </Transition>
      </Transitions>
    </State>
    <State>
      <Id>S2</Id>
    </State>
  </States>
</RuleSet>
私が探しているのは、Enumerable of Conditions と Enumerble of States を持つ RuleSet オブジェクトを含むオブジェクト グラフです。各状態には、以前に定義された条件、RuleSet の条件、および別の状態で作成された Enumerable の遷移があります。
独自のカスタム パーサーを作成する代わりに、誰かが既に作成した C# の XML パーサーを使用して、これを行う簡単な方法はありますか?
最初の回答から、もう少し明確にする必要があると思います。重複を減らすために参照を維持する設定をオンにして、オブジェクト グラフの単純なバージョンをシリアル化しようとしたとき。私は以下を受け取りました:
<RuleSet z:Id="1" >
    <Conditions z:Id="2" xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
        <a:anyType z:Id="3" i:type="b:AttributeEqualTo" >
            <b:AttributeName z:Id="4">Foo</b:AttributeName>
            <b:ExpectedValue z:Id="5" i:type="c:string" xmlns:c="http://www.w3.org/2001/XMLSchema">Bar</b:ExpectedValue>
            <b:Id z:Id="6">C1</b:Id>
        </a:anyType>
        <a:anyType z:Id="7" i:type="b:AttributeEqualTo" >
            <b:AttributeName z:Ref="5" i:nil="true"/>
            <b:ExpectedValue z:Ref="4" i:nil="true"/>
            <b:Id z:Id="8">C2</b:Id>
        </a:anyType>
    </Conditions>
    <States z:Id="9" xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
        <a:anyType z:Id="10" i:type="b:State" >
            <b:EntryActions z:Id="11"/>
            <b:Id z:Id="12">S1</b:Id>
            <b:Transitions z:Id="13" z:Size="2">
                <a:anyType z:Id="14" i:type="c:Transition" >
                    <c:Condition z:Ref="3" i:nil="true"/>
                    <c:Next z:Id="15" i:type="b:State">
                        <b:EntryActions z:Id="16"/>
                        <b:Id z:Id="17">S2</b:Id>
                        <b:Transitions z:Id="18" z:Size="1">
                            <a:anyType z:Id="19" i:type="c:Transition">
                                <c:Condition z:Ref="7" i:nil="true"/>
                                <c:Next z:Id="20" i:type="b:State">
                                    <b:EntryActions z:Id="21"/>
                                    <b:Id z:Id="22">S3</b:Id>
                                    <b:Transitions z:Id="23" z:Size="0"/>
                                </c:Next>
                            </a:anyType>
                        </b:Transitions>
                    </c:Next>
                </a:anyType>
                <a:anyType z:Id="24" i:type="c:Transition" >
                    <c:Condition z:Ref="7" i:nil="true"/>
                    <c:Next z:Ref="20" i:nil="true"/>
                </a:anyType>
            </b:Transitions>
        </a:anyType>
        <a:anyType z:Ref="15" i:nil="true"/>
        <a:anyType z:Ref="20" i:nil="true"/>
    </States>
</RuleSet>
私がやろうとしているのは、 z:Id="x" と z:Ref="x" を独自の Id プロパティの使用法に置き換えることです。繰り返しますが、システムをより人間が書き込み可能にするためです。C# クラスで属性を設定して、タグの名前を変更する方法がわかります。