aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.BL/Serialization/SerializableEntityContractResolver.cs
diff options
context:
space:
mode:
authorRoy Ben Shabat <Roy.mail.net@gmail.com>2019-01-05 22:35:03 +0200
committerRoy Ben Shabat <Roy.mail.net@gmail.com>2019-01-05 22:35:03 +0200
commita7137c1f053ba48c3ce22bee483fe7f716cc90cb (patch)
tree743a606cb586a2b59585ea205e10551587846f06 /Software/Visual_Studio/Tango.BL/Serialization/SerializableEntityContractResolver.cs
parent97ae338e0413613ee5a0d135f8226ee42ba4aa06 (diff)
downloadTango-a7137c1f053ba48c3ce22bee483fe7f716cc90cb.tar.gz
Tango-a7137c1f053ba48c3ce22bee483fe7f716cc90cb.zip
Working on entities serialization.
Diffstat (limited to 'Software/Visual_Studio/Tango.BL/Serialization/SerializableEntityContractResolver.cs')
-rw-r--r--Software/Visual_Studio/Tango.BL/Serialization/SerializableEntityContractResolver.cs23
1 files changed, 17 insertions, 6 deletions
diff --git a/Software/Visual_Studio/Tango.BL/Serialization/SerializableEntityContractResolver.cs b/Software/Visual_Studio/Tango.BL/Serialization/SerializableEntityContractResolver.cs
index 1badbc23d..0150a6b5f 100644
--- a/Software/Visual_Studio/Tango.BL/Serialization/SerializableEntityContractResolver.cs
+++ b/Software/Visual_Studio/Tango.BL/Serialization/SerializableEntityContractResolver.cs
@@ -11,31 +11,42 @@ namespace Tango.BL.Serialization
{
public class SerializableEntityContractResolver : DefaultContractResolver
{
- private List<String> _ignoreProperties = new List<string>();
+ private EntitySerializationStrategy _serializationStrategy;
private EntitySerializationFlags _flags;
+ private EntitySerializationStrategy _current_object_strategy;
- public SerializableEntityContractResolver(EntitySerializationFlags flags)
+ public SerializableEntityContractResolver(EntitySerializationStrategy serializationStrategy, EntitySerializationFlags flags)
{
+ _serializationStrategy = serializationStrategy;
_flags = flags;
}
protected override JsonObjectContract CreateObjectContract(Type objectType)
{
- _ignoreProperties = new List<string>();
+ _current_object_strategy = new EntitySerializationStrategy();
if (typeof(ISerializableEntity).IsAssignableFrom(objectType))
{
- _ignoreProperties = (Activator.CreateInstance(objectType) as ISerializableEntity).GetIgnoreProperties(_flags);
+ _current_object_strategy = (Activator.CreateInstance(objectType) as ISerializableEntity).GetDefaultSerializationStrategy(_flags);
}
+
return base.CreateObjectContract(objectType);
}
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
- var props = _ignoreProperties.ToList();
+ var ignore_props = _serializationStrategy.IgnoreProperties.Concat(_current_object_strategy.IgnoreProperties).Distinct().ToList();
+ var include_props = _serializationStrategy.IncludeProperties.Concat(_current_object_strategy.IncludeProperties).Distinct().ToList();
+
JsonProperty property = base.CreateProperty(member, memberSerialization);
property.Ignored = false;
- property.ShouldSerialize = (x) => !props.Contains(property.PropertyName);
+ property.ShouldSerialize = (x) =>
+ {
+ MemberInfo mi = member;
+ return (!ignore_props.Exists(y => y.DeclaringType.IsAssignableFrom(mi.DeclaringType) && y.ToString() == mi.ToString()))
+ ||
+ (include_props.Exists(y => y.DeclaringType.IsAssignableFrom(mi.DeclaringType) && y.ToString() == mi.ToString()));
+ };
return property;
}
}