public void ReadData(IObjectDataInput input) { ds = input.ReadObject <IDataSerializable>(); portable = input.ReadObject <IPortable>(); ds2 = input.ReadObject <IDataSerializable>(); }
public ComplexDataSerializable(IPortable portable, IDataSerializable ds, IDataSerializable ds2) { this.portable = portable; this.ds = ds; this.ds2 = ds2; }
public void ReadData(IObjectDataInput input) { ds = input.ReadObject<IDataSerializable>(); portable = input.ReadObject<IPortable>(); ds2 = input.ReadObject<IDataSerializable>(); }
public static DataArray Serialize(this IDataSerializable obj) { var array = new DataArray(); foreach (var field in obj.GetType().GetProperties()) { var name = CamelToSnake(field.Name); if (field.PropertyType.IsGenericType) { var gtd = field.PropertyType.GetGenericTypeDefinition(); var args = field.PropertyType.GetGenericArguments(); if (gtd == typeof(List <>)) { // Add list elements if (!typeof(IDataSerializable).IsAssignableFrom(args[0])) { throw new NotImplementedException("Cannot handle non-serializable types in lists yet"); } var listArray = new DataArray(); var value = (IList)field.GetValue(obj, null); var typename = CamelToSnake(args[0].Name); var namedValues = field.GetCustomAttributes(typeof(AnonymousListAttribute), true).Length == 0; foreach (var f in value) { var valueNode = SerializeObject(f); listArray.AddNode(namedValues ? NamedItem(typename, valueNode) : valueNode); } array.AddNode(NamedItem(name, listArray)); } else if (gtd == typeof(Dictionary <,>)) { // Add dictionary elements if (args[0] != typeof(string)) { throw new NotImplementedException("Cannot serialize dictionaries with non-string keys"); } if (!typeof(IDataSerializable).IsAssignableFrom(args[1])) { throw new NotImplementedException("Cannot handle non-serializable types in dictionaries yet"); } var dictArray = new DataArray(); var value = (IDictionary)field.GetValue(obj, null); foreach (var k in value.Keys) { dictArray.AddNode(NamedItem((string)k, SerializeObject(value[k]))); } array.AddNode(NamedItem(name, dictArray)); } else if (gtd == typeof(Tuple <,>)) { var tupleArray = new DataArray(); tupleArray.AddNode(new DataAtom(name)); var tuple = field.GetValue(obj, null) as ITuple; for (var i = 0; i < tuple.Length; i++) { tupleArray.AddNode(SerializeObject(tuple[i])); } array.AddNode(tupleArray); } else if (gtd == typeof(Nullable <>)) { var value = field.GetValue(obj, null); if (value != null) { array.AddNode(NamedItem(name, SerializeObject(value))); } } else { throw new NotImplementedException("Generic type support for " + field.PropertyType.FullName + " not implemented"); } } else { array.AddNode(NamedItem(name, SerializeObject(field.GetValue(obj, null)))); } } return(array); }