75 lines
2.6 KiB
C#
75 lines
2.6 KiB
C#
// Copyright (c) 2015-2017 schick Informatik
|
|
// Description: Helper Klasse damit die Deserialisierung richtig funktioniert, auch wenn man
|
|
// einen TypeConverter auf die Klasse loslässt..
|
|
|
|
using Newtonsoft.Json;
|
|
using Newtonsoft.Json.Serialization;
|
|
using System;
|
|
using System.ComponentModel;
|
|
|
|
namespace bsmd.database
|
|
{
|
|
public class NoTypeConverterJsonConverter<T> : JsonConverter
|
|
{
|
|
private static readonly IContractResolver resolver = new NoTypeConverterContractResolver();
|
|
|
|
private class NoTypeConverterContractResolver : DefaultContractResolver
|
|
{
|
|
protected override JsonContract CreateContract(Type objectType)
|
|
{
|
|
if (typeof(T).IsAssignableFrom(objectType))
|
|
{
|
|
var contract = this.CreateObjectContract(objectType);
|
|
contract.Converter = null; // Also null out the converter to prevent infinite recursion.
|
|
return contract;
|
|
}
|
|
return base.CreateContract(objectType);
|
|
}
|
|
}
|
|
|
|
public override bool CanConvert(Type objectType)
|
|
{
|
|
return typeof(T).IsAssignableFrom(objectType);
|
|
}
|
|
|
|
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
|
|
{
|
|
return JsonSerializer.CreateDefault(new JsonSerializerSettings { ContractResolver = resolver }).Deserialize(reader, objectType);
|
|
}
|
|
|
|
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
|
|
{
|
|
JsonSerializer.CreateDefault(new JsonSerializerSettings { ContractResolver = resolver }).Serialize(writer, value);
|
|
}
|
|
|
|
}
|
|
|
|
#region class MessageClassConverter
|
|
|
|
public class MessageClassConverter<T> : TypeConverter
|
|
{
|
|
public override bool CanConvertFrom(ITypeDescriptorContext context, System.Type sourceType)
|
|
{
|
|
if (sourceType == typeof(string))
|
|
{
|
|
return true;
|
|
}
|
|
return base.CanConvertFrom(context, sourceType);
|
|
}
|
|
|
|
public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
|
|
{
|
|
if (value is string)
|
|
{
|
|
string s = value.ToString();
|
|
//s = s.Replace("\\", "");
|
|
return JsonConvert.DeserializeObject<T>(s);
|
|
}
|
|
return base.ConvertFrom(context, culture, value);
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
}
|