和大神學習序列化和反序列化有意向教學的請在貼下留言留下聯系方式····
uj5u.com熱心網友回復:
搜索BinaryFormatter類即可。uj5u.com熱心網友回復:
你說得太草率,最好詳細說說。uj5u.com熱心網友回復:
''' <summary>
''' 序列化.
''' </summary>
''' <typeparam name="T"></typeparam>
''' <param name="Obj"></param>
''' <returns></returns>
Public Shared Function Serialize(Of T)(Obj As T) As Byte()
Dim restVal() As Byte
Using memStream As MemoryStream = New MemoryStream(128 * 1024)
Dim brFormatter As BinaryFormatter = New BinaryFormatter '//IFormatter
brFormatter.Serialize(memStream, Obj)
memStream.Flush()
restVal = memStream.ToArray()
End Using
Return restVal
End Function
''' <summary>
''' 反序列化.
''' </summary>
''' <typeparam name="T"></typeparam>
''' <param name="ObjByte"></param>
''' <returns></returns>
Public Shared Function DecSerialize(Of T)(ObjByte() As Byte) As T
Dim restObj As T
Using memStream As MemoryStream = New MemoryStream(ObjByte)
Dim brFormatter As BinaryFormatter = New BinaryFormatter
restObj = CType(brFormatter.Deserialize(memStream), T)
End Using
Return restObj
End Function
uj5u.com熱心網友回復:
NET里的序列化能用,但性能不太好,體積也比較大.你可以手工序列化或使用 谷歌,facbook 等公司都有開源的序列化.uj5u.com熱心網友回復:
樓主要求,最好使用 SQLITE/ LEVELDB 保存資料庫. KEY =控制元件名 , VALUE=https://bbs.csdn.net/topics/序列化結果.如果是輕量化,可以使用 INI 檔案, 控制元件名=BASE64后的序列化結果.
uj5u.com熱心網友回復:
添加參考,System.Runtime.Serialization
using System.Runtime.Serialization.Json;
using System.IO;
using System.Xml.Serialization;
using System.Xml;
using System.Runtime.Serialization.Formatters.Binary;
public class Serializer
{
/// 將物件序列化為json檔案
public static void ObjectToJson<T>(T t, string path) where T : class
{
DataContractJsonSerializer formatter = new DataContractJsonSerializer(typeof(T));
using (FileStream stream = new FileStream(path, FileMode.OpenOrCreate))
{
formatter.WriteObject(stream, t);
}
}
/// 將物件序列化為json字串
public static string ObjectToJson<T>(T t) where T : class
{
DataContractJsonSerializer formatter = new DataContractJsonSerializer(typeof(T));
using (MemoryStream stream = new MemoryStream())
{
formatter.WriteObject(stream, t);
string result = System.Text.Encoding.UTF8.GetString(stream.ToArray());
return result;
}
}
/// json字串轉成物件
public static T JsonToObject<T>(string json) where T : class
{
DataContractJsonSerializer formatter = new DataContractJsonSerializer(typeof(T));
using (MemoryStream stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(json)))
{
T result = formatter.ReadObject(stream) as T;
return result;
}
}
/// 將物件序列化為xml檔案
public static void ObjectToXml<T>(T t, string path) where T : class
{
XmlSerializer formatter = new XmlSerializer(typeof(T));
using (FileStream stream = new FileStream(path, FileMode.OpenOrCreate))
{
formatter.Serialize(stream, t);
}
}
/// 將物件序列化為xml字串
public static string ObjectToXml<T>(T t) where T : class
{
XmlSerializer formatter = new XmlSerializer(typeof(T));
using (MemoryStream stream = new MemoryStream())
{
formatter.Serialize(stream, t);
string result = System.Text.Encoding.UTF8.GetString(stream.ToArray());
return result;
}
}
/// 將xml檔案反序列化為物件
public static T XmlToObject<T>(T t, string path) where T : class
{
XmlSerializer formatter = new XmlSerializer(typeof(T));
using (FileStream stream = new FileStream(path, FileMode.OpenOrCreate))
{
XmlReader xmlReader = new XmlTextReader(stream);
T result = formatter.Deserialize(xmlReader) as T;
return result;
}
}
/// 將xml字串反序列化為物件
public static T XmlStrToObject<T>(T t, string str) where T : class
{
XmlSerializer formatter = new XmlSerializer(typeof(T));
StringReader xmlReader = new StringReader(str);
T result = formatter.Deserialize(xmlReader) as T;
return result;
}
/// 將物件序列化為二進制流
public static byte[] ObjectToString<T>(T t)
{
BinaryFormatter formatter = new BinaryFormatter();
using (MemoryStream stream = new MemoryStream())
{
formatter.Serialize(stream, t);
byte[] result = stream.ToArray();
return result;
}
}
/// 將二進制流反序列為型別
public static T StringToObject<T>(byte[] bytes) where T : class
{
BinaryFormatter formatter = new BinaryFormatter();
using (MemoryStream stream = new MemoryStream(bytes, 0, bytes.Length))
{
T result = formatter.Deserialize(stream) as T;
return result;
}
}
/// 將物件序列化為檔案
public static void ObjectToFile<T>(T t, string path)
{
BinaryFormatter formatter = new BinaryFormatter();
using (FileStream stream = new FileStream(path, FileMode.OpenOrCreate))
{
formatter.Serialize(stream, t);
stream.Flush();
}
}
/// 將檔案反序列化為物件
public static T FileToObject<T>(string path) where T : class
{
using (FileStream stream = new FileStream(path, FileMode.Open))
{
BinaryFormatter formatter = new BinaryFormatter();
T result = formatter.Deserialize(stream) as T;
return result;
}
}
}
uj5u.com熱心網友回復:
我用的 BinaryFormatter序列化資料后寫入指定的檔案,可是關閉后,再打開再寫入的時候就會將之前的檔案覆寫掉,致使檔案中的內容丟失,變成了新寫入的內容,該如何寫入才能在原內容后面直接追加,而不丟失原來的內容呢?uj5u.com熱心網友回復:
大佬能否教我?
uj5u.com熱心網友回復:
感覺你應該用 SQLITE/ LEVELDB 保存.
uj5u.com熱心網友回復:
謝謝您,我主要想保存在檔案中,有什么辦法嘛?
uj5u.com熱心網友回復:
工具 => NUGET => 管理解決方案的 NUGET 程式包 => 搜 LEVELDB或SQLITE .然后網上找 LEVELDB或SQLITE 的代碼即可.
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/155242.html
標籤:C#
