Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Deserializing nested JSON structure to a flattened class with Json.NET using annotations

Is it possible to use JsonProperty annotation to map a nested Json property to a non-nested .NET member? Say you've got some Json like this:

{
     "id":9999,
     "created_date":"Thu, 23 Jun 2011 12:56:24 +0000",
     "pos":{
        "type":"someType",
        "coordinates":[
           59.323,
           18.0654
        ]
     }
}

and want to deserialize it into a flattened class MyClass using

JsonConvert.DeserializeObject<MyClass>(jsonstr);

Can annotations be used to map the Json coordinates list to Lat and Lng in the class below:

public class MyClass {
   [JsonProperty("id")]
   public int Id { get; set; }
   [JsonProperty("created_date")]
   public DateTime Created { get; set; }
   [JsonProperty("????")]
   public float Lat { get; set; }
   [JsonProperty("?????")]
   public float Lng { get; set; }
}

Just curious. I can always define the class like this and it seems to work fine:

public class MyClass {
    [JsonProperty("id")]
    public int Id { get; set; }
    [JsonProperty("date_created")]
    public DateTime Created { get; set; }
    [JsonProperty("pos")]
    public PosClass Pos { get; set; }
}

public class PosClass
{
    public List<float> coordinates { get; set; }
}
like image 608
jul Avatar asked Jun 24 '11 00:06

jul


1 Answers

From personal experience, I struggled before trying to re-use my entities for communication (JSON, XML ... etc.) but after paying closer attention to existing patterns, I found out that having "data transfer objects" in addition to internal / storage entities that you already have will liberate my communication models and the only cost I paid was to accept doing manual, yet straight-forward, effort of manually-coded conversion between the two.

If you'd rather stick to what you have and performance is no big deal, then .NET reflection is your friend.

like image 112
Yaser Awajan Avatar answered Nov 19 '22 23:11

Yaser Awajan