다음을 통해 공유


방법: JSON 데이터 Serialize 및 Deserialize

JSON(JavaScript Object Notation)은 클라이언트 브라우저 및 AJAX 사용 웹 서비스 간에 소량의 데이터를 신속하게 교환할 수 있는 효율적인 데이터 인코딩 형식입니다.

이 항목에서는 DataContractJsonSerializer를 사용하여 .NET 형식 개체를 JSON 인코딩된 데이터로 serialize한 다음 JSON 형식의 데이터를 다시 .NET 형식의 인스턴스로 deserialize하는 방법을 보여 줍니다. 이 예제에서는 데이터 계약을 사용하여 사용자 정의 Person 형식의 serialization 및 deserialization을 보여 줍니다.

일반적으로 JSON serialization 및 deserialization은 AJAX 사용 끝점을 통해 노출되는 서비스 작업에서 데이터 계약 형식을 사용하는 경우 WCF(Windows Communication Foundation)에 의해 자동으로 처리됩니다. 그러나 일부 경우에서는 JSON 데이터로 직접 작업해야 할 수도 있습니다. 이 항목에서는 그러한 경우를 보여 줍니다.

Bb412179.note(ko-kr,VS.100).gif참고:
서버에서 보내는 회신의 serialization 동안 오류가 발생하거나 일부 다른 이유로 인해 회신 작업에서 예외를 throw하는 경우 클라이언트를 오류로 반환하지 않을 수 있습니다.

이 항목은 JSON Serialization 샘플을 기반으로 작성되었습니다.

사용자에 대한 데이터 계약을 정의하려면

  1. DataContractAttribute를 클래스에 연결하고 DataMemberAttribute 특성을 serialize할 멤버에 연결하여 Person에 대한 데이터 계약을 정의합니다. 데이터 계약에 대한 자세한 내용은 서비스 계약 디자인을 참조하십시오.

    [DataContract]
        internal class Person
        {
            [DataMember]
            internal string name;
    
            [DataMember]
            internal int age;
        }
    

형식 Person의 인스턴스를 JSON으로 serialize하려면

  1. Person 형식의 인스턴스를 만듭니다.

    Person p = new Person();
    p.name = "John";
    p.age = 42;
    
  2. DataContractJsonSerializer를 사용하여 Person 개체를 메모리 스트림으로 serialize합니다.

    MemoryStream stream1 = new MemoryStream();
    DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Person));
    
  3. WriteObject 메서드를 사용하여 JSON 데이터를 스트림에 씁니다.

    ser.WriteObject(stream1, p);
    
  4. JSON 출력을 표시합니다.

    stream1.Position = 0;
    StreamReader sr = new StreamReader(stream1);
    Console.Write("JSON form of Person object: ");
    Console.WriteLine(sr.ReadToEnd());
    

JSON에서 형식 Person의 인스턴스를 deserialize하려면

  1. DataContractJsonSerializerReadObject 메서드를 사용하여 JSON 인코딩된 데이터를 Person의 새 인스턴스로 deserialize합니다.

    stream1.Position = 0;
    Person p2 = (Person)ser.ReadObject(stream1);
    
  2. 결과를 표시합니다.

    Console.Write("Deserialized back, got name=");
    Console.Write(p2.name);
    Console.Write(", age=");
    Console.WriteLine(p2.age);
    

예제

Bb412179.note(ko-kr,VS.100).gif참고:
JSON serializer는 다음 샘플 코드에서처럼 동일한 이름의 여러 멤버를 가진 데이터 계약에 대한 serialization 예외를 throw합니다.

[DataContract]
public class TestDuplicateDataBase
{
    [DataMember]
    public int field1 = 123;
}
[DataContract]
public class TestDuplicateDataDerived : TestDuplicateDataBase
{
    [DataMember]
    public new int field1 = 999;
}

참고 항목

개념

독립 실행형 JSON Serialization
JSON 및 기타 데이터 전송 형식에 대한 지원