Beispiel #1
0
        private static Action <TObject, PNode> BuildDeserializeMethod(PropertyInfo property,
                                                                      IPlistConverter propertyValueConverter)
        {
            const string deserializeMethodName = nameof(IPlistConverter <object> .Deserialize);

            var instance  = Expression.Parameter(typeof(TObject));
            var parameter = Expression.Parameter(typeof(PNode));

            var converterType     = propertyValueConverter.GetType();
            var deserializeMethod = converterType.GetMethod(deserializeMethodName);

            if (deserializeMethod == null)
            {
                throw new InvalidOperationException($"Bad converter for type {property.PropertyType}");
            }

            var converter     = Expression.Constant(propertyValueConverter, converterType);
            var propertyValue = Expression.Call(converter, deserializeMethod, parameter);

            var body = Expression.Assign(Expression.Property(instance, property), propertyValue);

            return(Expression
                   .Lambda <Action <TObject, PNode> >(body, instance, parameter)
                   .Compile());
        }
Beispiel #2
0
 private void AddDeserializeMethodForProperty(PropertyInfo propertyInfo, IPlistConverter plistConverter)
 {
     _deserializeMethods.Add(propertyInfo.Name, BuildDeserializeMethod(propertyInfo, plistConverter));
 }
Beispiel #3
0
 public ArrayConverter(IPlistConverter <TElement> elementConverter)
 {
     _elementConverter = elementConverter;
 }
Beispiel #4
0
 public DictionaryConverter(IPlistConverter <TVal> elementConverter)
 {
     _elementConverter = elementConverter;
 }
 public ListConverter(IPlistConverter <TVal> elementConverter)
 {
     _elementConverter = elementConverter;
 }