1
<FileTransferSettings>
  <UploadPath src="user">C:\uploads</UploadPath>
  <DownloadPath src="app">C:\downloads</DownloadPath>
</FileTransferSettings>

この XML を、UploadPath と DownloadPath の 2 つのプロパティを持つ FileTransferSettings オブジェクトにデシリアライズしたいと思います。srcしかし、コードが問い合わせできるように、各プロパティ の属性も保持したいと考えています。

関連する UploadPathSrc および DownloadPathSrc プロパティを作成するのは、少し厄介で面倒だと思います。

これを .NET で表す別の方法はありますか? 私には、src属性はメタデータとして扱われるべきだと思われます。これに対するベストプラクティスはありますか?

(私がこれをやろうとしている理由の背景については、前の質問を参照してください)。

ありがとう。

4

3 に答える 3

4

XML を正しくシリアライズおよびデシリアライズするには、クラスを XML シリアライゼーション属性で装飾する必要があります。

[XmlRoot("FileTransferSettings")]
public class FileTransferSettings
{
   [XmlElement("DownloadPath")]
   public DownloadPath DownloadPath { get; set; }
   // ...
}

[XmlType("DownloadPath")]
public class DownloadPath
{ 
  [XmlAttribute]
  public string Src; // or use enum etc
  [XmlText]
  public string Text;
}

// the serialized XML looks like
<FileTransferSettings>
   <DownloadPath Src="...">text</DownloadPath>
   ....
</FileTransferSettings>
于 2009-02-23T17:22:44.300 に答える
3

ダニエル L.

public Class FileTransferPath
{
  public Enum SourceEnum { User, App }

  public SourceEnum Source { get; set; }  //Automatic properties in 3.5 Syntax
  public string FilePath { get; set; }
}

public Class FileTransferSettings
{
  public FileTransferPath UploadPath { get; set; }
  public FileTransferPath DownLoadPath { get; set; }
}
于 2009-02-23T17:17:15.547 に答える
3

文字列値「Path」と列挙値「Source」を持つ 2 番目のクラス FileTransferPath を作成できます。

class FileTransferSettings
{
   public FileTransferPath UploadPath { get; set; }
   public FileTransferPath DownloadPath { get; set; }
   // ...
}

class FileTransferPath
{
   public string Path { get; set; }
   public FileTransferSource Source { get; set}

   public enum FileTransferSource
   {
     None,
     User,
     Application,
     // ...
   }
}

次に、次のようなコードを使用できます

   obj.UploadPath.Path;
   obj.UploadPath.Source;

クラス プロパティに選択できるより適切な名前があるかもしれません。パスの繰り返しが好きかどうかはわかりません。 obj.Upload.Pathまたは何かがより良いかもしれません。

XmlSerialization を使用して、これを直接シリアル化/逆シリアル化することはできないことに注意してください。しかし、それはあなたが必要とすることを達成します。(そして、XML にシリアル化することもできますが、もう少し作業を行う必要があります)

于 2009-02-23T17:08:43.850 に答える