c#Json.NET ToJson()FromJson()

コフィフス

外部のJsonConverterクラスを作成することの価値は理解していますが、多くの場合、不必要に面倒だと感じています。

JSon.NETを伝えるための一般的な方法があることがあれば、クラスが持つstring ToJson()直列化のために、その方法の使用であればクラスが持つvoid FromJson(string json)直列化復元する方法を使用することをを?

または/また、クラスにその用途がある場合不変型の場合static T FromJson(string json)

コフィフス

特別なconveterが必要です:

namespace Newtonsoft.Json {
  class JsonManualConverter : JsonConverter {
    public override bool CanConvert(Type t) => t.GetMethod("ToJson") != null && t.GetMethod("FromJson") != null;

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) =>
      objectType.GetMethod("FromJson").Invoke(new object(), new object[] { JRaw.Create(reader).ToString() });

    public override void WriteJson(JsonWriter writer, object o, JsonSerializer serializer) =>
      writer.WriteRaw(o.GetType().GetMethod("ToJson").Invoke(o, new object[] { }) as string);
  }
}

次に、次のことを簡単に行うことができます。

  [JsonConverter(typeof(JsonManualConverter))]
  class MyClass {
    public string ToJson() => // serialize and return json string
    static public MyClass FromJson(string json) => // deserialize and return a MyClass instance
    ...
  }

Json.Netはこれらのメソッドを使用します

また、以下を作成すると便利であることがわかりました。

namespace Newtonsoft.Json {
    public static string ToJson(object value) => JsonConvert.SerializeObject(value);
    public static string ToJson(object value, Formatting formatting) => JsonConvert.SerializeObject(value, formatting);
    public static string ToJson(object value, params JsonConverter[] converters) => JsonConvert.SerializeObject(value, converters);
    public static string ToJson(object value, Formatting formatting, params JsonConverter[] converters) => JsonConvert.SerializeObject(value, formatting, converters);
    public static string ToJson(object value, JsonSerializerSettings settings) => JsonConvert.SerializeObject(value, settings);
    public static string ToJson(object value, Type type, JsonSerializerSettings settings) => JsonConvert.SerializeObject(value, type, settings);
    public static string ToJson(object value, Formatting formatting, JsonSerializerSettings settings) => JsonConvert.SerializeObject(value, formatting, settings);
    public static string ToJson(object value, Type type, Formatting formatting, JsonSerializerSettings settings) => JsonConvert.SerializeObject(value, type, formatting, settings);

    public static T FromJson<T>(string value) => JsonConvert.DeserializeObject<T>(value);
    public static T FromJson<T>(string value, params JsonConverter[] converters) => JsonConvert.DeserializeObject<T>(value, converters);
    public static T FromJson<T>(string value, JsonSerializerSettings settings) => JsonConvert.DeserializeObject<T>(value, settings);
}

そして使用JConvert.ToJson(obj)してJConvert<T>.FromJson(json)ショートカットとして

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事