6 Şubat 2018 Salı

NewTonsoft JsonSerializerSettings Sınıfı

Kullanım
Şöyle yaparız.
var settings = new JsonSerializerSettings
{
  NullValueHandling = NullValueHandling.Ignore,
  ReferenceLoopHandling = ReferenceLoopHandling.Ignore
};

string json = "...";
dynamic d = JsonConvert.DeserializeObject<ItemB>(json, settings);
Converters Alanı
Bir sınıf tanımlarız.
/// <summary>
/// Converts a <see cref="DataTable"/> to and from JSON.
/// </summary>
public class TypeInferringDataTableConverter : 
  Newtonsoft.Json.Converters.DataTableConverter
{
  public override object ReadJson(JsonReader reader, Type objectType,
    object existingValue, JsonSerializer serializer)
  {
    ...
  }
  ...
}
Şöyle yaparız.
var settings = new JsonSerializerSettings {
  Converters = new[] { new TypeInferringDataTableConverter() } };

DataTable tbl1 = JsonConvert.DeserializeObject<DataTable>(jsonTable1, settings);
Error Alanı
Şöyle yaparız.
var json = "{'sessionId': 's0j1', 'commandId': 19, 'options': invalidValue}"; 

var settings = new JsonSerializerSettings
{
    Error = delegate(object sender, ErrorEventArgs args)
    {
      args.ErrorContext.Handled = true;
    }
});
var result = JsonConvert.DeserializeObject(json, settings);
NullValueHandling Alanı
Şöyle yaparız.
var settings = new JsonSerializerSettings
{
  NullValueHandling = NullValueHandling.Ignore,
  ReferenceLoopHandling = ReferenceLoopHandling.Ignore
};
TypeNameHandling Alanı - Serialization
Açıklaması şöyle.
When we de/serialize with setting TypeNameHandling = TypeNameHandling.All, the .NET type name will always be included when serializing.
Şöyle yaparız.
var settings = new JsonSerializerSettings()
{
    TypeNameHandling = TypeNameHandling.All
};
Şöyle yaparız.
var dict = new Dictionary<string, object>() 
{
  { "RandomBooleans",...}
};
var json = JsonConvert.SerializeObject(dict, settings);
Kullanılan C# type bilgisini de json çıktısına dahil eder. Çıktı olarak şunu alırız
{  
  "$type":"SSystem.Collections.Generic.Dictionary...",
  "RandomBooleans":{...}
   
}
TypeNameHandling Alanı - Deserialization
Elimizde soyut sınıf olsun.
[Serializable]
public class MyConcreteClass : MyAbstractClass
{
    public string MyProperty { get; set; }
}

[Serializable]
public abstract class MyAbstractClass { }
Deserialize ederken şu hatayı alırız
Newtonsoft.Json.JsonSerializationException: Could not create an instance of type MyAbstractClass. Type is an interface or abstract class and cannot be instantiated.
Bundan kurtulmak için şöyle yaparız.
var settings = new JsonSerializerSettings()
{
  TypeNameHandling = TypeNameHandling.All
};



Hiç yorum yok:

Yorum Gönder