public static byte[] ToByteArray(this IPackable packable) { using (var packer = new Packer()) { packable.Pack(packer); return(packer.ToByteArray()); } }
/// <summary> /// Convert a packable object to a JSON string. /// </summary> /// <param name="packable">The object to pack</param> /// <returns></returns> public static string Pack(IPackable packable, bool storeTypeInformation = false) { IDictionary <string, object> values = packable.Pack(); // Annoyingly we need to convert to a IDictionary Dictionary <string, object> mutable = new Dictionary <string, object>(); foreach (KeyValuePair <string, object> pair in values) { mutable.Add(pair.Key, pair.Value); } if (storeTypeInformation) { mutable.Add(TypeKey, packable.GetType().AssemblyQualifiedName); } return(JsonParser.ToJson(mutable)); }
public void Serialize(BinaryWriter writer) { writer.Write((byte)type); switch (type) { case AnyType.Bool: writer.Write(_longVal != 0); return; case AnyType.Byte: writer.Write((byte)_longVal); return; case AnyType.Short: writer.Write((short)_longVal); return; case AnyType.Int: writer.Write((int)_longVal); return; case AnyType.Long: writer.Write(_longVal); return; case AnyType.Float: writer.Write(floatVal); return; // todo: demonyang 是否有编码问题 case AnyType.String: writer.Write(strVal); return; case AnyType.Object: objVal.Pack(writer); return; } }
void PutInBag(IPackable x) { x.Pack(); }
public void Write(string name, IPackable packable) { Write(name, (writer) => packable?.Pack(writer)); }
public void Pack(IPackable packable) { packable?.Pack(this); }