AutoBeans are pretty great for this - by just defining a bean interface and a factory interface AutoBeans will work out the rest of the details of how to turn your data into JSON (or some other stringy data) and back again.
This question/answer discusses how this could be addressed both with JavaScriptObject subclasses and with AutoBeans: Cache in GWT app/widget with HTML5 localStorage
If possibly encoding several different types, an answer that came up a few months ago might be helpful: Parsing JSON objects of unknown type with AutoBean on GWT
If you are working with data from RPC, things get a little trickier. First, you have to consider that the RPC serialization mechanisms are wired up for one way travel (though there are two of them, one for each direction) to prevent some server->client objects from being deserialized on the server for security reasons. Second, remember that every time models change or RPC interfaces change, the server and the client no longer see eye-to-eye, as the serialization format has been modified - your app's localStorage cache would have data that could no longer be read after some updates.