私は .net の JavaScriptSerializer を使用しています。オブジェクトをシリアル化すると、列挙型は文字列名ではなく int 値としてシリアル化され、列挙型の目的が無効になります。代わりにすべての列挙型を文字列名にシリアル化するにはどうすればよいですか? 組み込みのシリアライザーでこれを達成できますか、それとももっと良いものを使用する必要がありますか?
どんな助けでも大歓迎です。
私は .net の JavaScriptSerializer を使用しています。オブジェクトをシリアル化すると、列挙型は文字列名ではなく int 値としてシリアル化され、列挙型の目的が無効になります。代わりにすべての列挙型を文字列名にシリアル化するにはどうすればよいですか? 組み込みのシリアライザーでこれを達成できますか、それとももっと良いものを使用する必要がありますか?
どんな助けでも大歓迎です。
Newtonsoft の JsonNet シリアライザーには、この機能が列挙型コンバーターに組み込まれています。
ここからダウンロードしてください: http://json.codeplex.com/
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
var objToSerialize = new Object();
var settings = new JsonSerializerSettings();
settings.Converters.Add(new StringEnumConverter());
var serializer = JsonSerializer.Create(settings);
var sb = new StringBuilder();
using (var sw = new StringWriter(sb))
{
serializer.Serialize(sw, objToSerialize);
}
string json = sb.ToString();
1 つの方法は、次の MSDN の例のように、EnumMemberAttribute 属性の Value プロパティを使用することです。
[DataContract(Name = "CarCondition")]
public enum CarConditionWithDifferentNames
{
[EnumMember(Value = "New")]
BrandNew,
[EnumMember(Value = "Used")]
PreviouslyOwned,
[EnumMember]
Rental
}
他の多くの投稿で見られるように、.NET JsonSerializer または DataContractJsonSerializer は EnumMember 属性を尊重しませんが、列挙のさまざまなメンバーに数値を使用します。
そのため、独自のカスタム シリアライザーを作成するか、サード パーティのライブラリを使用することが、今後の方法です。