diff options
| author | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2019-01-05 22:35:03 +0200 |
|---|---|---|
| committer | Roy Ben Shabat <Roy.mail.net@gmail.com> | 2019-01-05 22:35:03 +0200 |
| commit | a7137c1f053ba48c3ce22bee483fe7f716cc90cb (patch) | |
| tree | 743a606cb586a2b59585ea205e10551587846f06 /Software/Visual_Studio/Tango.BL/Serialization/SerializableEntityContractResolver.cs | |
| parent | 97ae338e0413613ee5a0d135f8226ee42ba4aa06 (diff) | |
| download | Tango-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.cs | 23 |
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; } } |
