Accessing properties with a dot in their name

Solution 1:

You could create a root class to deserialize into and use JsonProperty

public class Root
{
    // Use the proper type instead of object
    [JsonProperty(PropertyName = "en.pickthall")]
    public IEnumerable<object> EnPickthall { get; set; } 

    public Root() { }
}

Used as follows

Root stuff = JsonConvert.DeserializeObject<Root>(result);

foreach(var x in stuff.EnPickthall)
{

}

Solution 2:

You could serialize not to dynamic but to JObject and then access your property via

JObject stuff = JsonConvert.DeserializeObject<JObject>(Jsonstring);
var x = stuff.Value<String>("my.property")

Solution 3:

C# doesn't have any way of quoting identifiers. If it's not a valid identifier, your only option is reflection.

However, it's possible the object returned by your JSON deserializer changed the identifiers to make them useable in C# - you might want to enumerate all the properties to check if that is the case. A dynamic object with indexers might also be a solution (allowing e.g. stuff["en.pickthall"]).

Another alternative is to change the way the serializer maps properties. For example, Newtonsoft.Jsoft allows you to customize this using a IContractResolver. It's quite easy to replace the . for something more C#-sane in this way.