c# – PubNub JSON序列化代码适用于示例项目,但不适用于我的项目
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – PubNub JSON序列化代码适用于示例项目,但不适用于我的项目,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3526字,纯文字阅读大概需要6分钟。
内容图文
![c# – PubNub JSON序列化代码适用于示例项目,但不适用于我的项目](/upload/InfoBanner/zyjiaocheng/770/997c4a0ae8964e4ba3822262c73c3c2b.jpg)
我正在制作一个Winamp插件,其功能是将通过HTTP播放的歌曲的详细信息发送到网页.
它的工作原理如下:触发了Winamp歌曲事件 – >检查新歌 – >使用PubNub(C#API)发布到网页.
到目前为止,我进入了一切都按预期工作的阶段,除了PubNub代码,它没有序列化我传递给JSON的对象.我继续在PubNub控制台中获取的仅仅是{} – 一个空的JSON对象.
关于项目结构的一点背景:
我使用Sharpamp这是一个自定义库,可以使用C#制作Winamp插件.我也在使用PubNub C# API. gen_notifier_cs项目是Sharpamp创建的C插件包装器. notifier_cs是我所有代码所在的位置.我假设其他两个项目是自我解释的.我在notifier_cs中引用了PubNub API,并且在notifier_cs和PubNub API中都引用了Sharpamp.
因此,需要序列化的对象是Sharpamp中定义的类Song:
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; }
}
所以,如果我有一个带有歌曲数据的歌曲对象,我会去pubnub.publish(“winamp_pipe”,song);发布它,PubNub会自动将数据序列化为JSON.但那只是在我的解决方案中不起作用.
为了测试它没有序列化的原因,我将该类复制到PubNub API中的example code file. Visual Studio将类更改为此(请注意公共Song()方法):
public class Song
{
public Song() // VS added this method
{
return; // I added this otherwise it would not compile
}
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; }
}
在同一个示例文件中,我启动了一个带有一些值的默认歌曲对象:
Song song = new Song();
song.Album = "albumname";
song.Artist = "artistname";
song.HasMetadata = true;
song.Title = "songtitle";
song.Year = "2012";
并发表了它:pubnub.publish(“winamp_pipe”,song);它工作了!我在PubNub频道中获得了JSON对象!
{ “专辑”: “ALBUMNAME”, “艺术家”: “ARTISTNAME”, “文件名”:空, “HasMetadata”:真实的, “标题”: “SONGTITLE”, “年”: “2012”}
因此,我尝试用Sharpamp中定义的原始类替换“新”Song类.我尝试在notifier_cs项目中添加另一个类定义,但是与Sharpamp中的那个相冲突,我必须依赖它.就我能想到的那样,我一直在尝试这么多东西.不用说没有人占上风.不过,我得到的只是一个空的JSON对象.
这是在PubNub API的publish方法中进行序列化的代码.我会提醒您,此代码适用于PubNub示例文件,但不适用于我的项目:
DataContractJsonSerializer serializer = new DataContractJsonSerializer(objectToSerialize.GetType());
serializer.WriteObject(ms, objectToSerialize);
ms.Position = 0;
using (StreamReader reader = new StreamReader(ms))
{
return reader.ReadToEnd();
}
我最后一天都拔了头发.我知道这篇文章超长但我很感激你的意见.
解决方法:
发布数据:PubNub和C#Winamp Song Class
您已将数据存储在winamp_song对象实例中.如果您尝试序列化winamp_song对象实例,它将失败.如果传入winamp_song,则序列化将失败,因为实例具有不可序列化的成员.最好的方法是创建一个您拥有和定义的Song类.在Song类中定义将通过PubNub传递的成员值.这样,您可以直接填充发布给订阅者所需的值.
Song song = new Song();
song.Album = winamp_song.Album;
song.Artist = winamp_song.Artis;
song.HasMetadata = winamp_song.HasMetadata;
song.Title = winamp_song.Title;
song.Year = winamp_song.Year;
当您甚至在订阅者上收到歌曲数据发布时,您将能够接收反序列化数据,将值填充到新的Song类实例中.
歌曲类定义如下
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; }
}
PubNub是与Winamp插件的已安装副本进行通信的最佳方法.
内容总结
以上是互联网集市为您收集整理的c# – PubNub JSON序列化代码适用于示例项目,但不适用于我的项目全部内容,希望文章能够帮你解决c# – PubNub JSON序列化代码适用于示例项目,但不适用于我的项目所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。