So I decided that the additional performance cost of the DOM vs. SAX parser was worth the benefit in simplicity and flexibility, and streaming response serialization is a material benefit. I dumped the 7 days worth of work, and spent another day working in the boost::json based json-rpc and all is good.