메시지를 처리하는 응용 프로그램이 있다고 가정 해 보겠습니다. 메시지는 IMessage 인터페이스를 구현하는이 경우의 개체입니다. 이는 단지 표식입니다..NET에서 감사/로깅 목적으로 개체를 serialize하기위한 전략은 무엇입니까?
이 응용 프로그램에서 메시지가 처리되지 않으면 먼저 감사 및 문제 해결을 위해 먼저 기록하고 싶습니다. 둘째로 나는 그것을 재 처리를 위해 사용하고 싶을지도 모른다.
이상적으로는 메시지를 사람이 읽을 수있는 형식으로 직렬화해야합니다. 첫 번째 후보는 JSON과 같은 것이 있지만 XML입니다. 메시지를 XML로 직렬화하려면 메시지 객체가 XML 직렬화 가능 여부를 알고 싶습니다. 한 가지 방법은 형식을 반영하고 매개 변수가없는 생성자가 있는지 확인하고 다른 하나는 IXmlSerializable 인터페이스가 필요한지 확인하는 것입니다. 나는이 접근법 중 하나에 너무 만족하지 않습니다. 그것을 직렬화하고 예외를 잡으려고하는 세 번째 옵션이 있습니다. 이것은 실제로 도움이되지 않습니다. - 어떤 식 으로든, 어떤 식 으로든, IMessage (또는 파생 된 유형)은 xml-serializable이어야합니다.
반사 경로는 IXmlSerializable 경로 잠금 미래에 내가 JSON으로 직렬화 형식을 변경할 수 있습니다 하나의 포맷, 내 메시지 아래 등의 보안, 성능, 같은 명백한 단점이있다. 다른 것은 심지어 가장 단순한 객체 일지라도 ReadXml과 WriteXml 메소드를 구현해야합니다.
임의의 개체 (마커 인터페이스를 구현하는 한)를 XML로 직렬화 할 수 있지만 향후 메시지를 XML로 잠그지 않는 작업량이 가장 적은 경로가 있습니까?
이것이 실제 문제가 될 수 있음을 알기가 어렵습니다. 디자인을 통하지 않으면 디버깅 할 때 클래스가 직렬화 가능하지 않다는 것을 확실히 알 수 있습니다. –
Xml 직렬화에 매개 변수없는 생성자가 필요하지만 "임의의 객체"의 성공적인 직렬화를 보장하는 것만으로는 충분하지 않습니다. 예 : 개체에 IDictionary와 같이 직렬화 할 수없는 필드가 포함될 수 있습니다. –
정확히 Tuzo - 그 이상이 필요합니다. 이 개체가 Xml 직렬화를위한 것이지만 IXmlSerializable과 같은 것이 ReadXml/WriteXml을 구현하도록 강요하지 않습니다. –