|
|
게시됨 2016. 8. 23. 오후 5:07:02
|
|
|

최근 쌍 형은 위챗 공개 계정의 개발자 모드를 시도해보고 싶어 위챗 공개 플랫폼에 계정을 신청했습니다. 그 후 오픈 플랫폼의 인터페이스 가이드를 보러 갔고, 그는 그룹에 링크를 올렸습니다. 최근에 위챗이 과열된 상태였고, 저도 호기심에 클릭했습니다.
메시지 인터페이스 가이드를 클릭하면 공개 플랫폼의 메시지 인터페이스가 데이터 상호작용을 위해 XML을 사용한다는 것을 확인할 수 있습니다. 데이터 조작의 편의를 위해 보통 XML을 직렬화하고 역직렬화합니다. 직렬화는 객체의 상태를 유지하거나 전송할 수 있는 형식으로 변환하는 과정입니다. 직렬화의 반대는 디직렬라이즈로, 스트림을 객체로 변환합니다. 이 두 과정이 결합되어 데이터를 저장하고 전송하는 것이 용이합니다.
먼저 직렬화에 대해 이야기해 보겠습니다. 그래픽 메시지에 대한 답장을 위한 XML 형식을 예로 들겠습니다. 이 형식은 기본적으로 위의 메시지 푸시와 메시지 응답을 모두 포함합니다.
<xml><Articles>공개 플랫폼 POST에서 데이터 응답을 받아 출력을 반환하면, XML 직렬화를 사용하는데, 이는 응답 데이터 객체를 공개 플랫폼에서 제공하는 XML 데이터 형식으로 변환하여 데이터 전송에 편리합니다. 직렬화 여기서 저는 C#으로 간단한 예제 코드를 작성했습니다. 직렬화된 문자열을 얻기 위해, 직접적인 출력은 없고, 물론 프로젝트에서는 직접 Response.Output을 할 수 있습니다.
여기서 언급된 것은, XmlSerializer 클래스의 Serialize 메서드가 생성하는 XML 루트 요소의 이름이 기본적으로 직렬화 클래스의 이름으로 유지된다는 점입니다. 왜 이 문장을 읽을 때 이렇게 혀를 꼬는 기분이 들까요? 그리고 xml 같은 의미 없는 단어를 클래스 이름으로 쓰고 싶지 않고, 생성된 XML 요소가 xml이라는 이름을 갖도록 직렬화 클래스에 속성 태그를 추가해야 합니다. 이 태그를 추가하지 않거나, 직렬화 클래스 이름이 XML의 루트 요소 이름과 일치하지 않으면 항상 문서 형식 오류가 발생합니다.
루트 요소를 얻은 후에는 Articles의 컬렉션 노드 문제를 해결해야 하며, 이 시점에서 강한 타입의 새로운 리스트를 생성해야 하며, 이 변수는 Articles public property라고 불립니다.
XmlArrayItemAttribute는 XmlSerializer를 직렬화된 배열에 배치할 수 있도록 지정하는 파생 타입입니다. 클래스를 만들고 디버깅하며 살펴보니 큰 문제는 거의 없습니다.
디시리얼화에 대해 이야기해 봅시다. 일반 위챗 사용자가 공개 계정으로 메시지를 보내면, 위챗 서버는 해당 URL에 메시지를 게시합니다. 이 시점에서 우리는 수신된 데이터를 쉽게 작동하고 저장할 수 있도록 필요한 객체로 디직렬라이즈해야 합니다. 보통 Request.Form["param"]을 사용해 Post 데이터를 얻는데, 많은 개발자들이 인터페이스 문서를 보면 POST 데이터에 매개변수가 없어 혼란스러워하며 데이터를 어떻게 얻는지 모릅니다. 여기서는 Request.InputStream을 사용하여 들어오는 HTTP 엔티티 본문의 내용을 얻습니다. 자세한 내용은 이 기사를 참고해 주세요: http://blog.sina.com.cn/s/blog_9fa44b550101ee3r.html
디직렬화 여기서는 C#으로 간단한 예제 코드를 작성했습니다.
여기서는 그래픽 메시지에 응답하는 XML 샘플 데이터를 직접 복사하는 문자열이기 때문에, Deserialize(TextReader textReader)의 오버로드가 사용되며, 프로젝트에서 Deserialize(Stream stream)의 오버로드를 직접 사용할 수 있습니다.
XML 직렬화에 관한 질문은 MSDN의 XML 및 SOAP 직렬화에 관한 기사를 참조하세요
관련 인스턴스 코드 파일을 github의 XmlSerializerExample 페이지에 올렸습니다
서둘러 글을 쓰고 단순히 표시를 하세요. 밤에 충분히 먹지 않아서 지금은 메스꺼움이 느껴져요. 빨리 자야 해. 실수가 있으면 꼭 지적해 주세요.
원본 링크:
http://imr3.com/tech/weixin-message-api-serialize
|
이전의:XML 디직렬화 XML 문서(1, 2)에 오류가 있습니다.다음:[소스 코드].net/c# 위챗 지능형 채팅 GIS 위치 정보 스캔을 통해 사진 기능 얻습니다
|