2

次のようにシリアル化できる C# クラスを作成する最良の方法は何ですか?

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
                       }
             }
            ]

上記のコードでは、「c」または「xy」のいずれかを割り当てますが、両方を同時に割り当てません。私は Newtonsoft.Json を使用しています。私が欲しいのは、上記のコードにシリアル化できる C# クラスだけです。

4

1 に答える 1

4

クラスは次のようになります。

[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;
}

テストするコードは次のようになります。

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 });
于 2012-08-16T16:35:31.560 に答える