How to deserialize Json property to dynamic object if it starts with @ symbol.
{
"@size": "13",
"text": "some text",
"Id": 483606
}
I can get id and text properties like this.
dynamic json = JObject.Parse(txt);
string x = json.text;
A common way to deserialize JSON is to first create a class with properties and fields that represent one or more of the JSON properties. Then, to deserialize from a string or a file, call the JsonSerializer. Deserialize method.
In Deserialization, it does the opposite of Serialization which means it converts JSON string to custom . Net object. In the following code, it creates a JavaScriptSerializer instance and calls Deserialize() by passing JSON data. It returns a custom object (BlogSites) from JSON data.
JSON is a format that encodes objects in a string. Serialization means to convert an object into that string, and deserialization is its inverse operation (convert string -> object).
JsonPropertyAttribute indicates that a property should be serialized when member serialization is set to opt-in. It includes non-public properties in serialization and deserialization. It can be used to customize type name, reference, null, and default value handling for the property value.
Assuming you use Json.NET:
public class MyObject
{
[JsonProperty("@size")]
public string size { get; set; }
public string text { get; set; }
public int Id { get; set; }
}
var result = JsonConvert.DeserializeObject<MyObject>(json);
Since you can't use @ in a C# token name, you would need to map the @size to something else, like "SizeString" (since it is a string in your JSON above). I use the WCF data contract attribute, but you could use the equivalent JSON attribute
...
[DataMember(Name = "@size")]
public string SizeString { get; set; }
...
Here is an example of how to deserialize the Json string. Maybe you can adapt to your situation, or clarify your question.
...
string j = @"{
""@size"": ""13"",
""text"": ""some text"",
""Id"": 483606
}";
MyClass mc = Newtonsoft.Json.JsonConvert.DeserializeObject<MyClass>(j);
...
[DataContract]
public class MyClass
{
[DataMember(Name="@size")]
public string SizeString { get; set; }
[DataMember()]
public string text { get; set; }
[DataMember()]
public int Id { get; set; }
}
If you don't plan loading the Json into a predefined class, you can do the following...
var o = JObject.Parse(j);
var x = o["text"];
var size = o["@size"];
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