 <p>If at all possible you should store your additional values as <code>hidden</code> input fields (one per value) rather than as meta-data on other input fields. They'll then get serialized automatically as part of the form.</p> <p>I won't write a serializer for you, as I think it's a bad idea. If you <em>insist</em> on sending the values to the browser as <code>data-</code> fields you could do this, though, to convert those <code>data-</code> fields into <code>hidden</code> inputs.</p> <pre><code>$('#myform:input').each(function() { var input = this; $.each($(input).data(), function(key, value) { $('&lt;input&gt;', {type: hidden, name: key, value: value}).insertAfter(input); }); }); </code></pre> <p>Hey presto, hidden input fields that'll be automatically serialized!</p> <p>Be aware that jQuery also uses <code>.data()</code> to store things like events. To avoid iterating over those objects you'd have to use the native DOM functions to retrieve the <code>data-</code> <em>attributes</em>, and not any data-related <em>properties</em> that have been stored on the elements.</p>