Dot-Net
Windows 10 UWP 應用程序中的 System.Serializable 屬性消失了嗎?
在嘗試將開源庫 (Aforge.net) 移植到 UWP 時,我發現 System.Serializable 屬性似乎不存在。UWP 參考的工作方式略有不同,我仍在努力解決這些變化,所以我希望我只是遺漏了一些簡單的東西。
我的問題是,有人可以確認 System.Serializable 屬性在 UWP 應用程序中是否有效/應該有效嗎?我試過瀏覽 MSDN 和其他各種穀歌資源,但找不到任何證據。
任何幫助是極大的讚賞。
更新
看起來我可能需要使用 DataContract / DataMember 屬性而不是 Serializable 就像這裡提到的攜帶式庫:攜帶式類庫:推薦替換$$ Serializable $$
想法?
您需要使用以下屬性:
用
[DataContract]並用
[DataMember]或者
[IgnoreDataMember]例如:
[DataContract] public class Foo { [DataMember] public string Bar { get; set; } [IgnoreDataMember] public string FizzBuzz { get; set; } }
正如上面來自 Lance McCarthy 的程式碼:
[DataContract] public class Foo { [DataMember] public string SomeText { get; set; } // .... [IgnoreDataMember] public string FizzBuzz { get; set; } }此外,您可以使用我自己的副檔名(!!!如果您需要將 MemoryStream 保存到文件而不是字元串,請將其更改為 FileStream):
public static class Extensions { public static string Serialize<T>(this T obj) { var ms = new MemoryStream(); // Write an object to the Stream and leave it opened using (var writer = XmlDictionaryWriter.CreateTextWriter(ms, Encoding.UTF8, ownsStream: false)) { var ser = new DataContractSerializer(typeof(T)); ser.WriteObject(writer, obj); } // Read serialized string from Stream and close it using (var reader = new StreamReader(ms, Encoding.UTF8)) { ms.Position = 0; return reader.ReadToEnd(); } } public static T Deserialize<T>(this string xml) { var ms = new MemoryStream(); // Write xml content to the Stream and leave it opened using (var writer = new StreamWriter(ms, Encoding.UTF8, 512, leaveOpen: true)) { writer.Write(xml); writer.Flush(); ms.Position = 0; } // Read Stream to the Serializer and Deserialize and close it using (var reader = XmlDictionaryReader.CreateTextReader(ms, Encoding.UTF8, new XmlDictionaryReaderQuotas(), null)) { var ser = new DataContractSerializer(typeof(T)); return (T)ser.ReadObject(reader); } } }然後只使用這些擴展:
[TestClass] public class UnitTest1 { [TestMethod] public void TestSerializer() { var obj = new Foo() { SomeText = "Sample String", SomeNumber = 135, SomeDate = DateTime.Now, SomeBool = true, }; // Try to serialize to string string xml = obj.Serialize(); // Try to deserialize from string var newObj = xml.Deserialize<Foo>(); Assert.AreEqual(obj.SomeText, newObj.SomeText); Assert.AreEqual(obj.SomeNumber, newObj.SomeNumber); Assert.AreEqual(obj.SomeDate, newObj.SomeDate); Assert.AreEqual(obj.SomeBool, newObj.SomeBool); } }祝你好運朋友。