クラスの例があるとしましょう:
public class SomeObject
{
private FlagEnumerable _someFlagValue = FlagEnumerable.Flag1;
public SomeObject()
{
}
[DataMember(Name = "someFlagValue")]
[Browsable(false)]
public FlagEnumerable SomeFlagValue
{
get { return _someFlagValue; }
set { _someFlagValue= value; }
}
}
そして、これが私の説明FlagEnumerable
です:
[DataContract]
[Flags]
[JsonConverter(typeof(JsonEnumConverter))]
public enum FlagEnumerable
{
[EnumMember]
Flag1 = 1,
[EnumMember]
Flag2 = 2,
[EnumMember]
Flag3 = 4
}
さらに、列挙型を文字列に変換したり、列挙型を文字列の配列にフラグ付けしたり、その逆を行ったりするカスタム JSON コンバーターがあります。
このコードはうまく機能し、例の JSON を正常に逆シリアル化します。
{
someFlagValue: [
"Flag1"
]
}
問題は、グローバル コンバーターを JsonSerializer に適用する方法です。から削除[JsonConverter(typeof(JsonEnumConverter))]
してからFlagEnumerable
呼び出して追加すると
MyJsonSerializer.Converters.Add(new JsonEnumConverter());
次のエラーが表示されます。
現在の JSON 配列 ([1,2,3] など) を型 'FlagEnumerable' に逆シリアル化できません。これは、正しく逆シリアル化するために型が JSON プリミティブ値 (文字列、数値、ブール値、null など) を必要とするためです。このエラーを修正するには、JSON を JSON プリミティブ値 (文字列、数値、ブール値、null など) に変更するか、逆シリアル化された型を配列または List のようなコレクション インターフェイス (ICollection、IList など) を実装する型に変更します。 JSON 配列から逆シリアル化されます。JsonArrayAttribute を型に追加して、強制的に JSON 配列から逆シリアル化することもできます。
どんな助けでも大歓迎です!わかりずらくてすみません、お気軽に質問してください。