If you control the object model, then you can write code to do it, but it is a lot of maintenance. There are lots of problems, though, which mean that unless you need absolutely the fastest performance, then serialization is often the most manageable answer.
This is one of the cases where BinaryFormatter
works acceptably; normally I'm not a fan (due to the issues with versioning etc) - but since the serialized data is for immediate consumption this isn't an issue.
If you want it a bit faster (but without your own code), then protobuf-net
may help, but requires code changes (to add the necessary metadata etc). And it is tree-based (not graph-based).
Other serializers (XmlSerializer
, DataContractSerializer
) are also fine, but if it is just for clone, they may not offer much over BinaryFormatter
(except perhaps that XmlSerializer
doesn't need [Serializable]
.
So really, it depends on your exact classes and the scenario.