For example:
public static string GetXPath<TModel, TMember>(this TModel model, Expression<Func<TModel, TMember>> expr)
{
...
}
var result = new MyObject().GetXPath(x=> x.DataList[1].Value);
Console.WriteLine(result);
And this will print out something like this (structure without attributes, just like DataContractSerializer do by default):
/DataList[1]/Value