NewTonsoft etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
NewTonsoft etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

29 Eylül 2017 Cuma

NewTonsoft DefaultContractResolver Sınıfı

CreateProperties metodu
Örnek
Elimizde şöyle bir sınıf olsun
class LongNameContractResolver : DefaultContractResolver
{
  protected override IList<JsonProperty> CreateProperties(Type type,alo
    MemberSerialization memberSerialization)
  {
    // Let the base class create all the JsonProperties 
    // using the short names
    IList<JsonProperty> list = base.CreateProperties(type, memberSerialization);

    // Now inspect each property and replace the 
    // short name with the real property name
    foreach (JsonProperty prop in list)
    {
      prop.PropertyName = prop.UnderlyingName;
    }

    return list;
  }
}
Şu sınıfı Json'a çevirmek isteyelim.
class Foo
{
  [JsonProperty("cust-num")]
  public string CustomerNumber { get; set; }
  [JsonProperty("cust-name")]
  public string CustomerName { get; set; }
}
Şöyle yaparız
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.Formatting = Formatting.Indented;
settings.ContractResolver = new LongNameContractResolver();

return JsonConvert.SerializeObject(obj, settings);
JsonProperty nesnesinin PropertyName alanını değiştirdiğimiz için belirtilen isimler yerine alanın kendi ismi kullanılır. Çıktı olarak şunu alırız.
{
  "CustomerNumber": "BG60938",
  "CustomerName": "Bubba Gump Shrimp Company"
}

NewTonsoft JsonProperty Anotasyonu

PropertyName  Alanı
Nesnenin alanının Json'a çevrilirken hangi key değer ile yazılacağını belirtir.

Örnek
Elimizde şöyle bir sınıf olsun
class Foo
{
  [JsonProperty("cust-num")]
  public string CustomerNumber { get; set; }
  [JsonProperty("cust-name")]
  public string CustomerName { get; set; }
}
Bu sınıfı serialize edelim.
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.Formatting = Formatting.Indented;

return JsonConvert.SerializeObject(obj, settings);
Çıktı olarak şunu alırız.
{
  "cust-num": "BG60938",
  "cust-name": "Bubba Gump Shrimp Company"
}

10 Eylül 2017 Pazar

NewTonsoft JsonExtensionData Attribute

Örnek
Elimizde şöyle bir json olsun. Testname1,Testname3,Testname7 verilerini Dictionary içine toplamak isteyelim
[{
  "Projekt": "Bakker Bouw Service",
  "Ruimte": "Hoofdgebouw",
  "Apparaat": {
    "project": "Bosboom001",
    "versie": "812"
  },
  "Apparaat naam": "",
  "Status": "Goedgekeurd",
  "Testname1": "",
  "Testname3": "2000-01-04T10:37:00+01:00",
  "Testname7": "2001-01-03T00:00:00+01:00"
  }, 
  ...
]
Elimizde şöyle bir yapı olsun
public class KeuringRegel
{
  public string Projekt { get; set; }
  public string Ruimte { get; set; }
  public Apparaat Apparaat { get; set; }
  [JsonProperty(PropertyName = "Apparaat naam")]
  public string Apparaatnaam { get; set; }
  public string Status { get; set; }
  [JsonExtensionData()]
  public TestNames testNames { get; set; }
}

public class TestNames : Dictionary<string, object>
{
  public new void Add(string key, object value)
  {
    if (key.StartsWith("testname", StringComparison.OrdinalIgnoreCase))
    {
      base.Add(key, value);
    }
  }
}
Şöyle yaparız.
string fileContent = null;
using (var reader = new StreamReader(file.OpenReadStream()))
{
  fileContent = reader.ReadToEnd();
}
List<KeuringRegel> list = JsonConvert.DeserializeObject<List<KeuringRegel>>(fileContent);