1
votes

Trying to serialize tuple to json:

List<Tuple<string, string, string, string, string, string>> iCalEvents = new List<Tuple<string, string, string, string, string, string>>();

If I output the value using:

string iCalEventsJson = JsonConvert.SerializeObject(iCalEvents);

It produces valid json:

[{"Item1":"Film / Event -- 05/10","Item2":"","Item3":"","Item4":"Lorem ipsum dolor sit amet, consectetur adipisicing elit. Saepe harum, similique eaque ratione optio nihil est, nostrum velit minima soluta, recusandae quis, tenetur sunt ut. Tempora accusamus provident maxime, sunt debitis quaerat nemo, nostrum cupiditate necessitatibus ipsam deleniti consequatur quos quae odio amet obcaecati, eligendi.","Item5":"2017-05-10","Item6":"2017-05-12"},{"Item1":"Film / Event Detail -- 05/12","Item2":"","Item3":"","Item4":"Development Film / Event Detail","Item5":"2017-05-12","Item6":"2017-05-12"},{"Item1":"Film / Event Detail -- 05/14","Item2":"","Item3":"","Item4":"Development Film / Event Detail","Item5":"2017-05-14","Item6":"2017-05-14"},{"Item1":"Film / Event Detail -- 05/16","Item2":"","Item3":"","Item4":"Development Film / Event Detail","Item5":"2017-05-16","Item6":"2017-05-16"},{"Item1":"Film / Event Detail -- 05/19","Item2":"","Item3":"","Item4":"Development Film / Event Detail","Item5":"2017-05-19","Item6":"2017-05-19"}]

However, when I pass the string variable to jquery ajax in the following:

var json = @iCalEventsJson;    
$.ajax({
        url: '@Url.Action("CreateICalEvent", "ICalEvent")',
        type: 'POST',
        dataType: 'json',
        data: json,
        contentType: 'application/json; charset=utf-8',
        success: function (data) {
            var message = data.Message;
            $("#resultMessage").html(message);
        }
    })

It produces invalid json and causes ajax to fail:

[{&quot;Item1&quot;:&quot;Film / Event -- 05/10&quot;,&quot;Item2&quot;:&quot;&quot;,&quot;Item3&quot;:&quot;&quot;,&quot;Item4&quot;:&quot;Lorem ipsum dolor sit amet, consectetur adipisicing elit. Saepe harum, similique eaque ratione optio nihil est, nostrum velit minima soluta, recusandae quis, tenetur sunt ut. Tempora accusamus provident maxime, sunt debitis quaerat nemo, nostrum cupiditate necessitatibus ipsam deleniti consequatur quos quae odio amet obcaecati, eligendi.&quot;,&quot;Item5&quot;:&quot;2017-05-10&quot;,&quot;Item6&quot;:&quot;2017-05-12&quot;},{&quot;Item1&quot;:&quot;Film / Event Detail -- 05/12&quot;,&quot;Item2&quot;:&quot;&quot;,&quot;Item3&quot;:&quot;&quot;,&quot;Item4&quot;:&quot;Development Film / Event Detail&quot;,&quot;Item5&quot;:&quot;2017-05-12&quot;,&quot;Item6&quot;:&quot;2017-05-12&quot;},{&quot;Item1&quot;:&quot;Film / Event Detail -- 05/14&quot;,&quot;Item2&quot;:&quot;&quot;,&quot;Item3&quot;:&quot;&quot;,&quot;Item4&quot;:&quot;Development Film / Event Detail&quot;,&quot;Item5&quot;:&quot;2017-05-14&quot;,&quot;Item6&quot;:&quot;2017-05-14&quot;},{&quot;Item1&quot;:&quot;Film / Event Detail -- 05/16&quot;,&quot;Item2&quot;:&quot;&quot;,&quot;Item3&quot;:&quot;&quot;,&quot;Item4&quot;:&quot;Development Film / Event Detail&quot;,&quot;Item5&quot;:&quot;2017-05-16&quot;,&quot;Item6&quot;:&quot;2017-05-16&quot;},{&quot;Item1&quot;:&quot;Film / Event Detail -- 05/19&quot;,&quot;Item2&quot;:&quot;&quot;,&quot;Item3&quot;:&quot;&quot;,&quot;Item4&quot;:&quot;Development Film / Event Detail&quot;,&quot;Item5&quot;:&quot;2017-05-19&quot;,&quot;Item6&quot;:&quot;2017-05-19&quot;}]

Also tried encoding:

var json = @HttpUtility.HtmlEncode(iCalEventsJson);
$.ajax({
    url: '@Url.Action("CreateICalEvent", "ICalEvent")',
    type: 'POST',
    dataType: 'json',
    data: json,
    contentType: 'application/json; charset=utf-8',
    success: function (data) {
        var message = data.Message;
        $("#resultMessage").html(message);
    }
});

...but still invalid json:

[{&amp;quot;Item1&amp;quot;:&amp;quot;Film / Event -- 05/10&amp;quot;,&amp;quot;Item2&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;Item3&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;Item4&amp;quot;:&amp;quot;Lorem ipsum dolor sit amet, consectetur adipisicing elit. Saepe harum, similique eaque ratione optio nihil est, nostrum velit minima soluta, recusandae quis, tenetur sunt ut. Tempora accusamus provident maxime, sunt debitis quaerat nemo, nostrum cupiditate necessitatibus ipsam deleniti consequatur quos quae odio amet obcaecati, eligendi.&amp;quot;,&amp;quot;Item5&amp;quot;:&amp;quot;2017-05-10&amp;quot;,&amp;quot;Item6&amp;quot;:&amp;quot;2017-05-12&amp;quot;},{&amp;quot;Item1&amp;quot;:&amp;quot;Film / Event Detail -- 05/12&amp;quot;,&amp;quot;Item2&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;Item3&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;Item4&amp;quot;:&amp;quot;Development Film / Event Detail&amp;quot;,&amp;quot;Item5&amp;quot;:&amp;quot;2017-05-12&amp;quot;,&amp;quot;Item6&amp;quot;:&amp;quot;2017-05-12&amp;quot;},{&amp;quot;Item1&amp;quot;:&amp;quot;Film / Event Detail -- 05/14&amp;quot;,&amp;quot;Item2&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;Item3&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;Item4&amp;quot;:&amp;quot;Development Film / Event Detail&amp;quot;,&amp;quot;Item5&amp;quot;:&amp;quot;2017-05-14&amp;quot;,&amp;quot;Item6&amp;quot;:&amp;quot;2017-05-14&amp;quot;},{&amp;quot;Item1&amp;quot;:&amp;quot;Film / Event Detail -- 05/16&amp;quot;,&amp;quot;Item2&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;Item3&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;Item4&amp;quot;:&amp;quot;Development Film / Event Detail&amp;quot;,&amp;quot;Item5&amp;quot;:&amp;quot;2017-05-16&amp;quot;,&amp;quot;Item6&amp;quot;:&amp;quot;2017-05-16&amp;quot;},{&amp;quot;Item1&amp;quot;:&amp;quot;Film / Event Detail -- 05/19&amp;quot;,&amp;quot;Item2&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;Item3&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;Item4&amp;quot;:&amp;quot;Development Film / Event Detail&amp;quot;,&amp;quot;Item5&amp;quot;:&amp;quot;2017-05-19&amp;quot;,&amp;quot;Item6&amp;quot;:&amp;quot;2017-05-19&amp;quot;}]

What am I missing?

1
What would be the point. You cannot bind a Tuple in a post method (it has no parameterless constructor)user3559349

1 Answers

2
votes

You probably want to use Html.Raw or whatever the equivalent is these days.

var json = @Html.Raw(iCalEventsJson);