Json.Netを使用すると、私は自分のオブジェクトにプロパティを持ちます。これらのオブジェクトは、シリアル化/デシリアライズするために特別な注意が必要です。 JsonConverter
の子孫にすることで、私はこれを成功裏に達成することができました。これは、これを行うための一般的な方法です。このコードでJson.NetにカスタムJsonConverterをグローバルに登録する
public class SomeConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
...
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
...
}
public override bool CanConvert(Type objectType)
{
...
}
}
class SomeClass
{
[JsonProperty, JsonConverter(typeof(SomeConverter))]
public SomeType SomeProperty;
}
//Later on, in code somewhere
SomeClass SomeObject = new SomeClass();
string json = JsonConvert.SerializeObject(SomeObject, new SomeConverter());
私の問題は、私はすべてのシリアライズ/デシリアライゼーションの中で私のカスタムコンバータを導入する必要があるということです。私のプロジェクトでは、私はそれをすることができない多くのケースがあります。例えば、私はJson.Netを利用する他の外部プロジェクトも使用しており、彼らは私のSomeClass
インスタンスで作業しています。しかし、コードを変更したくない、または変更できないので、私は自分のコンバータを紹介する方法がありません。
static
メンバーを使用して、コンバータを登録する方法はありますか.Json.Netではおそらくシリアル化/デシリアライズが発生しても、コンバータは常に存在しますか?
おかげで百万ちょうど大きなハンマーで、あなたは私の一日行わ:) – Mehran
私はApp_Start()イベントでこれを行う場合、私はasp.netのWeb APIでエラーが出ます。 「メソッドが見つかりませんでした:」Void Newtonsoft.Json.JsonConvert.set_DefaultSettings' –
@DonnyV。 JSON.NETの古いバージョンを使用している可能性があります。これはweb.configに追加されたバージョンリダイレクトのためにコンパイルされます。 – BrainSlugs83