>웹 프론트엔드 >JS 튜토리얼 >JSON 직렬화 및 역직렬화에 대한 간략한 분석

JSON 직렬화 및 역직렬화에 대한 간략한 분석

高洛峰
高洛峰원래의
2017-01-18 10:38:221709검색

방법 1: System.Web.Script.Serialization 네임스페이스를 도입하고 JavaScriptSerializer 클래스를 사용하여 간단한 직렬화를 구현합니다. 직렬화 클래스: Personnel

    public class Personnel
        {
            public int Id { get; set; }
            public string Name { get; set; }
        }

직렬화 및 역직렬화 수행:

protected void Page_Load(object sender, EventArgs e)
        {
            Personnel personnel = new Personnel();
            personnel.Id = 1;
            personnel.Name = "小白";
            JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
            //执行序列化
            string r1 = jsonSerializer.Serialize(personnel);

            //执行反序列化
            Personnel _Personnel = jsonSerializer.Deserialize<Personnel>(r1);
         }

r1 출력 결과: {"Id":1,"Name":"小白"}
ScriptIgnore 특성을 사용하여 직렬화되지 않는 공용 속성 또는 공용 필드를 표시할 수 있습니다.

        public class Personnel
        {
            [ScriptIgnore]
            public int Id { get; set; }
            public string Name { get; set; }
        }

r1 출력 결과: {"Name":"小白"}

방법 2: System.Runtime.Serialization.Json 네임스페이스를 도입하고 DataContractJsonSerializer 클래스를 사용하여 직렬화 구현

직렬화 클래스: People

        public class People
        {
            public int Id { get; set; }
            public string Name { get; set; }
        }

직렬화 및 역직렬화 수행

protected void Page_Load(object sender, EventArgs e)
        {
            People people = new People();
            people.Id = 1;
            people.Name = "小白";

            DataContractJsonSerializer json = new DataContractJsonSerializer(people.GetType());
            string szJson = "";
            //序列化
            using (MemoryStream stream = new MemoryStream())
            {
                json.WriteObject(stream, people);
                szJson = Encoding.UTF8.GetString(stream.ToArray());
            }
            //反序列化
            using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(szJson)))
            {
                DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(People));
                People _people = (People)serializer.ReadObject(ms);
            }
         }

szJson 출력 결과: {"Id":1,"Name":"小白"}


IgnoreDataMember를 사용하여 멤버가 데이터 계약의 일부가 아니며 직렬화되지 않도록 지정할 수 있습니다. DataMember는 직렬화 속성 매개변수를 사용하여 필드를 표시합니다. DataContract를 사용하여 클래스를 표시해야 합니다. 그렇지 않으면 DataMember 태그가 작동하지 않습니다.

[DataContract]
        public class People
        {
            [DataMember(Name = "id")]
            public int Id { get; set; }
            [IgnoreDataMember]
            public string Name { get; set; }
        }

출력 결과: {"id":1}

JSON 직렬화 및 역직렬화에 대한 더 많은 기사를 보려면 PHP 중국어 웹사이트에 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.