[JsonObject]属性を適用してシリアル化する方法と同様にIEnumerableをJsonObjectとしてシリアル化したいが、DTOクラスを変更することはできません。この属性を導入する。IEnumerableは、Json.NETで[JsonObject]としてシリアライズします。
(シ)シリアライザにJsonObject(de)シリアライゼーションを強制する方法がありますか?
[JsonObject]属性を適用してシリアル化する方法と同様にIEnumerableをJsonObjectとしてシリアル化したいが、DTOクラスを変更することはできません。この属性を導入する。IEnumerableは、Json.NETで[JsonObject]としてシリアライズします。
(シ)シリアライザにJsonObject(de)シリアライゼーションを強制する方法がありますか?
はい、カスタムIContractResolver
を使用してこれを行うことができます。あなたがする必要があるのは、Json.NetのDefaultContractResolver
から派生するリゾルバクラスを作成し、FooList
が列挙型の型に置き換えられている、以下に示すようにCreateContract(Type)
メソッドをオーバーライドすることだけです。
class CustomResolver : DefaultContractResolver
{
protected override JsonContract CreateContract(Type type)
{
if (type == typeof(FooList))
return CreateObjectContract(typeof(FooList));
return base.CreateContract(type);
}
}
シリアライザの設定にリゾルバを追加し、あなたがシリアライズ時にこれらの設定を使用します。ここでは
var settings = new JsonSerializerSettings
{
ContractResolver = new CustomResolver(),
Formatting = Formatting.Indented
};
string json = JsonConvert.SerializeObject(yourObject, settings);
に非常にクールで正確に私が必要なもの。この例では、実際にオブジェクトとしてシリアライズする追加のメタデータを持つリストが必要でした:-) – Edwin
あなたがシリアライズしたいあなたのクラスとJSONの例を提供してください。それは – Evk