I have a list of objects of various data types (DateTime, int, decimal, string).
List
Check these to see why this is a way to go:
The need for a parameterless constructor
why dynamic instead of object wouldn't have worked
why DynamicType=true
wouldn't have worked
the need for an abstract base class and concrete implementations, by the creator of protobuf-net
why no serializer for object
Abstract base
[ProtoContract]
[ProtoInclude (1, typeof(ObjectWrapper))]
[ProtoInclude(2, typeof(ObjectWrapper))]
[ProtoInclude(3, typeof(ObjectWrapper))]
[ProtoInclude(4, typeof(ObjectWrapper))]
abstract class ObjectWrapper {
protected ObjectWrapper() {}
abstract public object ObjectValue { get; set; }
}
Implementation
[ProtoContract()]
class ObjectWrapper : ObjectWrapper
{
public ObjectWrapper(): base() { }
public ObjectWrapper(T t) { this.Value = t; }
[ProtoIgnore()]
public override object ObjectValue
{
get { return Value; }
set { Value = (T)value; }
}
[ProtoMember(1)]
public T Value { get; set; }
}
Test
var myObjects = new List();
myObjects.Add(new ObjectWrapper(3));
myObjects.Add(new ObjectWrapper(3.9m));
myObjects.Add(new ObjectWrapper (DateTime.Now));
myObjects.Add(new ObjectWrapper ("HELLO"));
var clone = Serializer.DeepClone(myObjects);