Newtonsoft json DeserializeObject is not parsing the json message when the name of the class is the root element.
var json = "  {\r\n \"amount\": {\r\n    \"currency\": \"EUR\",\r\n    \"value\": 99792\r\n  }\r\n}";
var amount = JsonConvert.DeserializeObject<Amount>(json)
and the class
class Amount 
{
    [JsonProperty("value")]
    public decimal? Value { get; set; }
    [JsonProperty("currency")]
    public string Currency { get; set; }
}
In that case the Amount properties are null. The problem is that the amount is nested in a more complex json and I found out that it is always returned empty because it starts with the "amount". Of course I tried some annotations in the Amount class like [DataContract] and [JsonObject] but still it is empty 
In case of:
 var json = "{\r\n    \"currency\": \"EUR\",\r\n    \"value\": 99792\r\n }";
Then is parsed properly. The question is how can I deseriale the json in the first case?
You could create a wrapping class Root, which has a single element called Amount. For example,
public class Root
{
    [JsonProperty("amount")]
    public Amount Amount { get; set; }
}
You would now need to deserialize to an instance of Root. For example,
var amount = JsonConvert.DeserializeObject<Root>(json);
Alternatively, if you do not want to declare another class, you could also use
var innerJson = JObject.Parse(json)["amount"].ToString();
var amount = JsonConvert.DeserializeObject<Amount>(innerJson);
                        You should model your classes like this:
public class Amount
{
    [JsonProperty("value")]
    public decimal? Value { get; set; }
    [JsonProperty("currency")]
    public string Currency { get; set; }
}
public class RootObject
{
    [JsonProperty("amount")]
    public Amount Amount { get; set; }
}
Then deserialize RootObject:
var amount = JsonConvert.DeserializeObject<RootObject>(json);
Note: You can paste your JSON into json2csharp.com, which models your JSON into C# classes for you.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With