It might be possible to get the dictionary working indeed - as most experienced programmers I wouldn't know, because no matter if it works or not, I know it should never be used. Dictionaries are implementation details, not something that can natively be represented in JSON or XML so you can never trust how it is serialized.
As suggested, change the controller to return IEnumerable<string>.
Something like:
public IEnumerable<MyClass> GetXMLResponse()
{
Dictionary<long, string> dic = new Dictionary<long, string>();
dic.Add(1, "a");
dic.Add(2, "b");
return dic.Select(entry => new MyClass { Key = entry.Key, Value = entry.Value});
}
In the client you can convert your enumerable of MyClass to a dictionary again by doing something like:
myclassList.ToDictionary(entry => entry.Key, entry => entry.Value);