I have used the ExpandoObject to do exactly this in a past project.
something like:
dynamic personDetails = new ExpandoObject();
var personLookup = (IDictionary<string, object>)personDetails;
personLookup["Name"] = yourXmlValue;
I've excluded the XLinq here, but you should get the gist.
You can then pass the dynamic object around and just access it like regular properties:
i.e.
var name = personDetails.Name;