2

重複の可能性:
enum 値を int としてシリアル化するにはどうすればよいですか?

こんにちは、みんな!

文字列表現ではなく、列挙値を強制的に整数値にシリアル化する方法があるかどうか疑問に思っています。

コンテキストを説明すると、Web サービスに大きく依存する Web アプリケーションで、要求の種類に関係なく、すべての要求ヘッダーに対して単一の基本クラスを使用しています。

ヘッダーに Result フィールドを追加したいので、Web サービス側で操作がどのように行われたかについて、呼び出し元のアプリにヒントを返す場所が必要です。その趣旨で宣言された列挙型は既にありますが、これらの列挙型を認識しない可能性のある Web サービスを呼び出すレガシー アプリがあるため、それらの値を整数としてシリアル化して送信したいと思います。

[XmlElement(ElementName = "stringrepresentationOfAttributeName")] を使用してこれらのヘッダーの長さを削減する必要があったのは、時折 IE の最大 URL の長さを超えたためです。値を整数に列挙します。

そのような属性について聞いたことがありますか?

いつものように、助けてくれてありがとう、パスカル

4

2 に答える 2

6

列挙型は int にシリアル化されます。しかし、一般的に、プロパティの 1 つを XML にシリアル化する方法が気に入らない場合は、次のようにすることができます。

[XmlIgnore]
public MyThing MyThing { get; set; }

[XmlElement("MyThing")]
[EditorBrowsable(EditorBrowsableState.Never), Browsable(false)]
public string MyThingForSerialization
{
    get { return //convert MyThing to string; }
    set { MyThing = //convert string to MyThing; }
}
于 2008-09-22T20:23:43.407 に答える
5

列挙型は、デフォルトでは int としてシリアル化されません。XMLSerializer を使用してクラスをシリアル化していますが、説明したのと同じ問題があります。

(Matt Howells の例は、MyThingForSerialization のスコープを public に変更すると機能するようですが、これにより 1 つの追加のパブリック プロパティが作成されるため、より良い実装が必要です)

于 2008-11-25T11:00:02.140 に答える