Reputation: 1261
What is the best way to create a C# class that can be serialized to as:
marks: [
{ c: [57.162499, 65.54718], // latitude, longitude - this type of coordinates works only for World Map
tooltip: 'Tyumen - Click to go to http://yahoo.com', // text for tooltip
attrs: {
href: 'http://yahoo.com', // link
src: '/markers/pin1_red.png' // image for marker
}
},
{ xy: [50, 120], // x-y coodinates - works for all maps, including World Map
tooltip: 'This is London! Click to go to http://london.com',
attrs: {
href: 'http://yahoo.com', // link
src: '/markers/pin1_yellow.png' // image for marker
}
}
]
In above code we assign either assign 'c' or 'xy' but not both at the same time. I'm using Newtonsoft.Json. The only thing I want is a C# class that can be serialized to above code.
Upvotes: 2
Views: 8701
Reputation: 6744
The class looks like this:
[Serializable]
public class Marks
{
public List<latlon> marks = new List<latlon>();
}
public class latlon
{
public double[] c;
public int[] xy;
public string tooltip;
public attributes attrs;
public latlon (double lat, double lon)
{
c = new double[] { lat, lon };
}
public latlon (int x, int y)
{
xy = new int[] { x, y };
}
}
public class attributes
{
public string href;
public string src;
}
The code to test it looks like this:
string json;
Marks obj = new Marks();
latlon mark = new latlon(57.162, 65.547)
{
tooltip = "Tyumen - Click to go to http://yahoo.com",
attrs = new attributes()
{
href = "http://yahoo.com",
src = "/markers/pin1_red.png"
}
};
obj.marks.Add(mark);
mark = new latlon(50, 120)
{
tooltip = "This is London! Click to go to http://london.com",
attrs = new attributes()
{
href = "http://yahoo.com",
src = "/markers/pin1_yellow.png"
}
};
obj.marks.Add(mark);
//serialize to JSON, ignoring null elements
json = JsonConvert.SerializeObject(obj, Formatting.None, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
Upvotes: 4