我试图从我的ASP .NET C#MVC3项目中将对象发送到同一解决方案中的Silverlight项目。Silverlight的C#XML序列化
这是我用来序列化和反序列化的代码,我从CodeProject(http://www.codeproject.com/Articles/233914/Passing-Objects-between-ASP-NET-and-Silverlight -Co)
public string getSerializedGameData()
{
Game g = Game.populateByID(this.gameID);
MemoryStream mem = new MemoryStream();
XmlSerializer xs = new XmlSerializer(typeof(Game));
mem.Seek(0, SeekOrigin.Begin);
xs.Serialize(mem, g);
byte[] data = mem.GetBuffer();
return Encoding.UTF8.GetString(data, 0, data.Length);
}
public static Game GetDeserializedGameObject(string xmlData)
{
StringReader sr = new StringReader(xmlData);
XmlSerializer xs = new XmlSerializer(typeof(Game));
return (Game)xs.Deserialize(sr);
}
这就是似乎工作的序列化和反序列化。
在我的ASPX页面,我已经把:
<input type="hidden" id="game" value="<%=HttpUtility.HtmlEncode(Game.populateByID(Convert.ToInt32(Request["gameID"])).getSerializedGameData()) %>" />
哪些应该得到的对象,它建设成一个字符串,并对其进行编码的HTML。然后嵌入为隐藏字段。当我运行我的错误现在
string s = HttpUtility.HtmlDecode(HtmlPage.Document.GetElementById("game").GetProperty("value").ToString());
Game g = Game.GetDeserializedGameObject(s);
:
对其进行解码,我使用
Data at the root level is invalid. Line 443, position 8
望着数据我看到有效的XML直到...
...
</gameEvents>
</Game>�����������
除了成千上万的无效字符,我删除它们以保持它的简短。
查看源我看到:
...
</gameEvents>
</Game>" />
所以它不会出现是一个编码问题。
最初我相信额外的字符超出了数据缓冲区的范围,但我没有看到它出现在源代码中,并且如果XML序列化和Deseriailize已经过测试,则会留下HTMLDecode ..但我可以没有发现任何问题。
我意识到我可以在去年之后剥离掉所有东西,但是我想知道是什么原因造成的,因为我不应该那样做。
任何帮助将不胜感激,谢谢!
这看起来像是有承诺,今天早上我只有一分钟时间让它旋转。我得到'名称HTML在当前上下文中不存在'。试图添加几个不同的进口似乎没有帮助。我会稍微考虑一下。 – pcaston2
'Html'是在每个ASP.NET MVC 3视图中可访问的HtmlHelper属性。 –
我使用创建Silverlight时创建的DisplayTestPage。我尝试添加另一个视图并嵌入Silverlight。 HTML。隐藏的标签正常工作,但实际的Silverlight插件由于某种原因不起作用。 – pcaston2