I came here looking for the actual attribute that makes Json.NET populate a readonly property when deserializing, and that's simply [JsonProperty]
, e.g.:
[JsonProperty]
public Guid? ClientId { get; private set; }
Alternative Solution
Just provide a constructor that has a parameter matching your property:
public class Foo
{
public string Bar { get; }
public Foo(string bar)
{
Bar = bar;
}
}
Now this works:
string json = "{ "bar": "Stack Overflow" }";
var deserialized = JsonConvert.DeserializeObject<Foo>(json);
Console.WriteLine(deserialized.Bar); // Stack Overflow
I prefer this approach where possible since:
- It doesn't require you to decorate your properties with attributes.
- It works with both
{ get; private set; }
and just { get; }
.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…