ASP .NET C# MVC3 プロジェクトから同じソリューション内の Silverlight プロジェクトにオブジェクトを送信しようとしています。
これは、シリアル化と逆シリアル化に使用しているコードです。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 シリアライズとデシリアライズがテストされている場合は、HTMLDecode が残ります..しかし、何も見つけることができませんそれは間違っています。
おそらく最後の > の後にすべてを取り除くことができると思いますが、そうする必要はないので、何が原因なのか知りたいです。
どんな助けでも大歓迎です、ありがとう!