0

私は「新しい言語」(それほど野心的ではない) XML 定義に取り組んでいます。xml (シリアライズ/デシリアライズ) と API を同時に使用してオブジェクト グラフを操作するオプションが必要です。

public class Project
{
    public List<Connection> Connections  { get; set; }
    public List<Table> Tables { get; set; }

   /* Constructors and more.... */
}

public class Connection
{
    public string Name { get; set; }
    public string ConnectionString { get; set; }

    /* Constructors and more.... */
 }

public class Table
{
    public string TableName { get; set; }
    public Connection Conn { get; set; }
    /* Constructors and more.... */
}

OK、次のようなものでこれをシリアライズ/デシリアライズしたい:

<Project>
 <Connections>
   <Connection Name="MyConnName" ConnectionString="My connection string"\>
 <\Connections>
 <Tables>
   <Table TableName="MyTable" ConnectionName="MyConnName"\>
 <\Tables>
<\Project>

ここには 2 つの問題があります。

  1. このクラスには、接続クラスへの参照である「Conn」プロパティがありますが、「言語」(Xml シリアル化) では「ConnectionName」に名前が変更されています (純粋なオブジェクト参照 (クラス) との混乱を避けるために名前を変更したい)言語「名前による参照」 (Xml シリアル化)

  2. ご覧のとおり、参照を保持したいのですが、「z.id ??」を含めません。preserveObjectReference が true に設定されている場合に DataContractSerializer が行うように、代わりに「名前」を使用したい (人間が読みやすい)

何か案は?

4

1 に答える 1

0

XmlSerializer「あなたが望むもの」のほとんどすべての有用な価値のために、あなたが望むことをするために拡張する良い方法は本当にありません。

探している種類の XML を生成するには、プロパティを で装飾し、Connection使用する XmlSerializer[XmlIgnore]のプロパティを追加し、が設定されている場合または設定された後に適切な場所を見つける必要があります。ConnectionNameConnectionConnectionName

または、要素を生成するコードを実装し、完全に手動で実装Tableする必要があります。IXmlSerializable<Table>

于 2011-09-13T00:25:23.397 に答える