Hmm nick why don't you try something other then brackets to represent the bracket and then update your LoadXPath property to first replace brackets with new character you selected for masking. For example let's say in our dictionary we call + sign a bracket. Then when passing in the XPath replace all brackets with + signs. Now update the get part of your LoadXPath path to replace + with [ when returning XPath for usage. May be it helps