Jacques Bronkhorst
Jacques Bronkhorst

Reputation: 1695

JsonConvert.DeserializeObject<T>(value) does not deserialize the object assigned

I have created a page with a KnockoutJS viewmodel. I want to post the Data to my Server using Web API.

I use this AJAX post:

$.ajax({
            url: "/api/blogpost",
            contenttype: "application/x-www-form-urlencoded",
            data: '=' + encodeURIComponent(ko.toJSON(self.Blog)),
            type: "POST",
            dataType: "JSON",
            timeout: 10000,
            success: function (Result) {

            },
            error: function (xhr, status) {
                alert(status + " - " + xhr.responseText);
            }
        });

To send the JSON data to my Web API method. This is the JSON that is sent to the server:

{
"BlogTitle": "Sample Post",
"BlogHTML": "<p><strong>Sample JSON Blog Post</strong></p>\n\n<h1><strong>It never works :(&nbsp;</strong></h1>\n",
"BlogThumbnail": "http://mysystemURL/SamplePost/What.jpg",
"BlogSummary": "This is a sample post",
"BlogFQURL": "Sample_Post",
"BlogTags": [
    "json",
    "devlopment",
    "newtag",
    ""
],
"BlogCategory": 1
}

My WEB API method received the JSON data correctly. The RAW string value looks like this:

"{\"BlogTitle\":\"Sample Post\",\"BlogHTML\":\"<p><strong>Sample JSON Blog Post</strong></p>\\n\\n<h1><strong>It never Works :(</strong></h1>\\n\",\"BlogThumbnail\":\"http://mysystemURL/SamplePost/What.jpg\",\"BlogSummary\":\"This is a sample post\",\"BlogFQURL\":\"Sample_Post\",\"BlogTags\":\"[\\\"json\\\",\\\"devlopment\\\",\\\"newtag\\\",\\\"\\\"]\",\"BlogCategory\":1}"

when I use the JSON visulizer on my data I get this: Using the VS Built In Visualiser

I use this BlogPost vari = JsonConvert.DeserializeObject<BlogPost>(value); to deserialize my object but everything stays null

Debugging my vari object

My BlogPost Object looks like this:

public class BlogPost
{
    public int BlogPostID { get; set; }
    public string BlogPostTitle { get; set; }
    public string BlogPostHTML { get; set; }
    public string BlogPostThumbnailURL { get; set; }
    public string BlogPostSummary { get; set; }
    public string BlogPostFQURL { get; set; }
    public int BlogPostCategory { get; set; }
    public List<TagDTO> BlogPostTags { get; set; }
}

I am really stumped.. Any help would be greatly appreciated!

Upvotes: 2

Views: 1035

Answers (1)

dee-see
dee-see

Reputation: 24078

Your property names don't match. The C# object's properties are BlogPost* and the JSON has Blog*, without the Post.

Correct the names either on the Javascript or on the C# side or use the JsonProperty attribute to specify the name of the serialized property.

Upvotes: 6

Related Questions