Xml属性でクラス名を変更するにはどうしたらいいですか?
2023-08-12 02:12:52
質問
という XML シリアライズ可能なクラスがあるとします。 Song :
[Serializable]
class Song
{
public string Artist;
public string SongTitle;
}
スペースを節約するために(また 半難読化 を半難読化するため)、xml要素の名前を変更することにしました。
[XmlRoot("g")]
class Song
{
[XmlElement("a")]
public string Artist;
[XmlElement("s")]
public string SongTitle;
}
これは次のようなXML出力を生成します。
<Song>
<a>Britney Spears</a>
<s>I Did It Again</s>
</Song>
クラス/オブジェクトの名前も変更/リマップしたい。例えば、上記の例では、クラス 歌 を g . その結果、xmlは次のようになります。
<g>
<a>Britney Spears</a>
<s>I Did It Again</s>
</g>
クラス名を変更することは可能ですか? xml-attributes を介して ?
私は手動でDOMを作成/トラバースしたくないので、私はそれがデコレータを介して達成することができるかどうか疑問に思っていました。
事前にありがとうございます!
UPDATEです。 おっと! 今回、私は 本当に がまたやってしまった! 言い忘れましたが、実はSongオブジェクトのリストをXMLでシリアライズしているのです。
これがシリアライズのコードです。
public static bool SaveSongs(List<Song> songs)
{
XmlSerializer serializer = new XmlSerializer(typeof(List<Song>));
using (TextWriter textWriter = new StreamWriter("filename"))
{
serializer.Serialize(textWriter, songs);
}
}
そして、これがXMLの出力です。
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfSong>
<Song>
<a>Britney Spears</a>
<s>Oops! I Did It Again</s>
</Song>
<Song>
<a>Rihanna</a>
<s>A Girl Like Me</s>
</Song>
</ArrayOfSong>
どうやら、この XmlRoot() 属性はリストコンテキストでオブジェクトの名前を変更しないようです。
私は何かを見逃しているのでしょうか?
どのように解決するのですか?
XmlRoot属性を確認してください。
ドキュメントはこちらでご覧になれます。 http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlrootattribute(v=VS.90).aspx
[XmlRoot(Namespace = "www.contoso.com",
ElementName = "MyGroupName",
DataType = "string",
IsNullable=true)]
public class Group
UPDATEです。 試したところ、VS 2008で完全に動作しました。 このコードです。
[XmlRoot(ElementName = "sgr")]
public class SongGroup
{
public SongGroup()
{
this.Songs = new List<Song>();
}
[XmlElement(ElementName = "sgs")]
public List<Song> Songs { get; set; }
}
[XmlRoot(ElementName = "g")]
public class Song
{
[XmlElement("a")]
public string Artist { get; set; }
[XmlElement("s")]
public string SongTitle { get; set; }
}
出力します。
<?xml version="1.0" encoding="utf-8"?>
<sgr xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www
.w3.org/2001/XMLSchema">
<sgs>
<a>A1</a>
<s>S1</s>
</sgs>
<sgs>
<a>A2</a>
<s>S2</s>
</sgs>
</sgr>
関連
-
[解決済み】C#で四捨五入する方法
-
[解決済み】プロジェクトビルド時のエラー。エディタでスクリプトにコンパイルエラーがあるため、Playerのビルドにエラーが発生する
-
[解決済み】値をNULLにすることはできません。パラメータ名:source
-
[解決済み] intをenumにキャストするにはどうすればよいですか?
-
[解決済み] PHPでHTML/XMLをパースして処理する方法とは?
-
[解決済み] ランダムな英数字の文字列を生成するにはどうすればよいですか?
-
[解決済み] XMLを解析して、特定のノード属性のインスタンスをカウントするには?
-
[解決済み] XMLでタグのブロックをコメントアウトするにはどうすればよいですか?
-
[解決済み】C#でXMLをビルドするにはどうしたらいいですか?
-
[解決済み】XMLドキュメントをデシリアライズする方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】"出力タイプがクラスライブラリのプロジェクトは直接起動できない"
-
[解決済み] メンバー '<メンバー名>' にインスタンス参照でアクセスできない
-
[解決済み] [Entity Framework 4.1でエンティティに関連オブジェクトを追加する際に、エンティティオブジェクトをIEntityChangeTracker.の複数のインスタンスから参照できない。
-
[解決済み] 保護レベルによりアクセス不能になりました。
-
[解決済み】Entity FrameworkからのSqlException - セッション内で他のスレッドが動作しているため、新しいトランザクションは許可されません。
-
[解決済み】Visual Studio: 操作を完了できませんでした。パラメータが正しくありません
-
[解決済み】値をNULLにすることはできません。パラメータ名:source
-
[解決済み】2つ(またはそれ以上)のリストを1つに統合する(C# .NETで
-
[解決済み】URLから画像をダウンロードする方法
-
[解決済み】WebResource.axdとは何ですか?