public override SharpTag Serialize(T value) { SharpTag tag = value.SerializeData(); tag["<type>"] = value.GetType().FullName; return(tag); }
public override T Deserialize(SharpTag tag) { if (tag.ContainsKey("<type>") && tag.GetString("<type>") != Type.FullName) { Type type = TagSerializer.GetType(tag.GetString("<type>")); if (type != null && Type.IsAssignableFrom(type) && TagSerializer.TryGetSerializer(type, out TagSerializer serializer)) { return((T)serializer.Deserialize(tag)); } } if (deserializer == null) { throw new ArgumentException(string.Format("Missing deserializer for type '{0}'", Type.FullName)); } return(deserializer(tag)); }