enum 値を強制的に整数にシリアル化することはできますか?[重複]
-
02-07-2019 - |
質問
こんにちは、みんな!
列挙値のシリアル化を文字列表現ではなく整数値に強制する方法があるかどうか疑問に思っています。
文脈を理解するには:Web サービスに大きく依存する Web アプリケーションでは、リクエストの種類に関係なく、すべてのリクエスト ヘッダーに対して単一の基本クラスを使用しています。
ヘッダーに Result フィールドを追加したいので、Web サービス側で操作がどのように行われたかに関するヒントを呼び出し側アプリに返す場所が必要になります。その旨を宣言した enum がすでにありますが、これらの enum を知らない可能性のある Web サービスを呼び出すレガシー アプリがあるため、これらの値を整数としてシリアル化して送信したいと思います。
これらのヘッダーの長さは、IE の最大 URL 長を超えることがあったため、[XmlElement(ElementName = "stringpresentationOfAttributeName")] を使用してすでに短縮する必要がありました。また、シリアル化を強制する同様の属性があるかどうか疑問に思いました。 enum 値を整数に変換します。
そのような属性について聞いたことがある人はいますか?
相変わらず、助けてくれてありがとう、パスカル
解決
列挙型は 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; }
}
他のヒント
列挙型はデフォルトでは int としてシリアル化されません。XMLSerializer を使用してクラスをシリアル化していますが、説明したのと同じ問題が発生します。
(Matt Howells の例は、MyThingForSerialization のスコープを public に変更すると機能するようですが、追加の public プロパティが 1 つ作成されるため、より良い実装が必要です)