c# - PubNub JSON serialization code works in example project but not in my project
- by pilau
I am making a Winamp plugin with the single function of sending the details of the song being played over HTTP to a webpage.
It works like this: Winamp song event triggered - check for new song - publish to webpage using PubNub (C# API).
So far I got to the stage where everything works exactly as it is supposed to, except for the PubNub code which doesn't serialize the object I'm passing for publishing into JSON. All I keep getting in the PubNub console is a mere {} - an empty JSON object.
A little background on the project structure:
I am using Sharpamp which is a custom library that enables making Winamp plugins with C#. I am also using the PubNub C# API. The gen_notifier_cs project is the C++ plugin wrapper created by Sharpamp. notifier_cs is where all my code resides. The two other projects are self explanatory I assume. I have referenced the PubNub API in notifier_cs, and also have referenced Sharpamp in both notifier_cs and PubNub API.
So, the objects that need to get serialized are of a class Song as defined in Sharpamp:
public class Song
{
public string Title { get; internal set; }
public string Artist { get; internal set; }
public string Album { get; internal set; }
public string Year { get; internal set; }
public bool HasMetadata { get; internal set; }
public string Filename { get; internal set; }
}
So let's say if I have a song object with song data in it, I would go pubnub.publish("winamp_pipe", song); to publish it and PubNub will automatically serialize the data into JSON. But that's just not working in my solution.
To test why it wasn't serializing, I copied that class to the example code file in the PubNub API. Visual Studio changed the class to this (notice the public Song() method):
public class Song
{
public Song()
{
return;
}
public string Album { get; set; }
public string Artist { get; set; }
public string Filename { get; set; }
public bool HasMetadata { get; set; }
public string Title { get; set; }
public string Year { get; set; }
}
On the same example file I initiated a default song object with some values:
Song song = new Song();
song.Album = "albumname";
song.Artist = "artistname";
song.HasMetadata = true;
song.Title = "songtitle";
song.Year = "2012";
And published it: pubnub.publish("winamp_pipe", song); and it worked! I got the JSON object in the PubNub channel!
{"Album":"albumname","Artist":"artistname","Filename":null,"HasMetadata":true,"Title":"songtitle","Year":"2012"}
So, I tried replacing the "new" Song class with the original one defined in Sharpamp. I tried adding another class definition in the notifier_cs project but that clashes with the one in Sharpamp which I have to rely on. I have been trying so many things as far as I could come up with. Needless to say none prevailed. Still, all I get is an empty JSON object.
I have been pulling out my hair for the last day. I know this post is super long but I appreciate your input nonetheless.
Thanks in advance.