C#--직렬화 및 반직렬화

2800 단어 C#
직렬화란 디스크 파일, 메모리 또는 다른 곳의 대상을 저장하고 가져오는 것을 말한다.직렬화할 때 모든 실례 데이터는 저장 매체에 저장되고 직렬화를 취소할 때 대상은 복원되며 원래의 실례와 구별할 수 없다.클래스에 Serializable 속성을 추가하기만 하면 직렬화된 구성원을 실현할 수 있습니다.반직렬화는 직렬화의 역과정으로 데이터는 저장 매체에서 읽고 클래스에 부여하는 실례 변수이다.직렬화는 기존 대상의 모든 상태를 저장할 수 있다. 나는 우리가 이전에 본 게임의 캐릭터 계정에 있는dat 파일이 직렬화된 결과일 것이라고 생각한다.나는dat 파일을 열어 보았는데 과연 내가 필요로 하는 정보를 얻었다. 일부 캐릭터의 등급 같은 정보가 그 안에 있었다.
객체를 직렬화하려면 다음과 같이 [serializable]를 붙여야 합니다.
[Serializable]
public class user{}

우선 시리얼화된 네임스페이스를 추가해야 합니다. using System.Runtime.Serialization.Formatters.Binary;
/// <summary>
///  
/// </summary>
/// <param name="obj"> </param>
/// <param name="file"> </param>
private static void WriteBinary(object obj, string file)
{

    using (Stream input = File.OpenWrite(HttpContext.Current.Server.MapPath(file)))
    {
        BinaryFormatter bf = new BinaryFormatter();
        bf.Serialize(input, obj);
    }
}

 
/// <summary>
///  
/// </summary>
/// <param name="file"> </param>
/// <returns>object </returns>
public static object ReadBinary(string file)
{
    using (Stream outPut = File.OpenRead(HttpContext.Current.Server.MapPath(file)))
    {
        BinaryFormatter bf = new BinaryFormatter();
        object user = bf.Deserialize(outPut);
        if (user != null)
        {
            return user;
        }
    }
    return null;
}

인스턴스 적용:
protected void Page_Load(object sender, EventArgs e)
{
    //.dat , , , 
    WriteBinary(new user()
    {
        id = 1,
        title = " ",
        url = "gzmsg.com",
        co = " ",
        des=" "
    }, "~/upload/data/user.dat");
    user user = ReadBinary("~/upload/data/user.dat") as user;
    Response.Write(user.des);   // 
}
[Serializable]
public class user
{
    public int id { get; set; }
    public string title { get; set; }
    public string url { get; set; }
    public string co { get; set; }
    public string des = string.Empty;
}

만약 일부 필드의 서열화 부분을 서열화하지 않을 필요가 있다면, 우리는 다음과 같은 설정에 따라 실현할 수 있다
[Serializable]
public class user
{
    public int id { get; set; }
    public string title { get; set; }
    public string url { get; set; }
    public string co { get; set; }
    [NonSerialized]
    public string des = string.Empty;
}

좋은 웹페이지 즐겨찾기