C# 컨텍스트에서 클래스 B가 Serializable로 표시되어 있고이 클래스로 표시되지 않은 클래스 A를 상속 한 사람이 있습니다. A를 직렬화 가능으로 표시하지 않고 B의 인스턴스를 직렬화하는 방법을 찾을 수 있습니까?.Net 이진 직렬화 상속
답변
사용자 정의 직렬화가 작동해야한다고 생각합니다. 즉 ISerializable
을 구현합니다. 그래도 좋은 옵션은 아닙니다.
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
class A {
public int Foo { get; set; }
}
[Serializable]
class B : A, ISerializable {
public string Bar { get; set; }
public B() { }
void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) {
info.AddValue("Foo", Foo);
info.AddValue("Bar", Bar);
}
private B(SerializationInfo info, StreamingContext context) {
Foo = info.GetInt32("Foo");
Bar = info.GetString("Bar");
}
}
static class Program {
static void Main() {
BinaryFormatter bf = new BinaryFormatter();
B b = new B { Foo = 123, Bar = "abc" }, clone;
using (MemoryStream ms = new MemoryStream()) {
bf.Serialize(ms, b);
ms.Position = 0;
clone = (B)bf.Deserialize(ms);
}
Console.WriteLine(clone.Foo);
Console.WriteLine(clone.Bar);
}
}
데이터를 저장 하시겠습니까? protobuf-net (BinaryFormatter
이 아니라 내가 사용하는 것으로 가정)을 사용하여이 작업을 수행 할 수있는 방법을 생각할 수도 있습니다.
답변 해 주셔서 감사합니다. 예, 정확하게, 저는 BynaryFormatter를 사용하고 있습니다. 필요는 객체의 데이터를 저장하는 것입니다. protobuf-net에 대해서, BinaryFormatter 대신에 그것을 사용하면 어떤 이점이 있습니까? 어떤 예가 있습니까? –
a : 빠르고 작음 (http://code.google.com/p/protobuf-net/wiki/Performance) b : 플랫폼/언어 독립적 (http://code.google.com/p/protobuf/wiki/ ThirdPartyAddOns) c : 메타 데이터 고유하지 않음 (필드 이름 변경, 유형 이동/이름 바꾸기 등 : http://marcgravell.blogspot.com/2009/03/obfuscation-serialization-and.html). 간단한 소개 : http://code.google.com/p/protobuf-net/wiki/GettingStarted –
소개는 상속을 다루지 않으며 protobuf-net의 상속 지원은 사용자 정의이며, 직접 * Java/C++/etc : 데이터를 볼 수는 있지만 상속이 아님 (이봐, 나는 와이어 포맷을 설계하지 않았다 ...) –
- 1. WCF의 이진 직렬화 NetTCPBinding
- 2. XML과 직렬화/직렬화 해제 용 이진 성능
- 3. 부스트 이진 직렬화 문제
- 4. C# 이진 직렬화
- 5. 이진 직렬화 네임 스페이스 변경
- 6. C#을 직렬화/상속
- 7. C++ 및 C#의 이진 직렬화/비 직렬화
- 8. 파이썬은 이진 트리 직렬화 문제
- 9. Silverlight XAML 객체의 이진 직렬화
- 10. 이진 직렬화 vs App 설정 (user.config)
- 11. .NET 상속 :
- 12. 이진 직렬화, 클래스에 새 필드 추가 - 작동합니까?
- 13. .NET 이진 XML
- 14. 이상한 .Net 직렬화 문제
- 15. .NET WCF 직렬화 문제
- 16. 왜 이진 직렬화에서 개체를 직렬화 가능으로 표시해야합니까?
- 17. Silverlight 어셈블리에 정의 된 형식의 이진 직렬화
- 18. 리팩토링 후 레거시 (이진) 파일의 비 직렬화
- 19. 직렬화에서 전달되는 데이터는 무엇입니까? (이진 직렬화)
- 20. 상속 및 인터페이스 .NET
- 21. .NET 3/4에서는 이벤트가 이진/직렬화가 허용됩니까?
- 22. 상속 기반 직렬화 메커니즘을 만드는 방법?
- 23. XML 상속 된 객체의 비 직렬화
- 24. .NET 이진 파일 읽기 성능
- 25. ASP .NET 세션 직렬화 비용!
- 26. protobuf-net 직렬화 성능 질문
- 27. .NET 직렬화 클래스 디자인 문제
- 28. .NET 바이너리 직렬화 조건부를 ISerializable
- 29. Rails 호환 .NET XML 직렬화
- 30. .NET 부분 클래스 대 상속
클래스 B에서 iSerializable을 구현해야한다고 생각합니다. 클래스 직렬화를 제어 할 수 있습니다. – Lazarus
B를 직렬화하려면 슈퍼 클래스 A의 상태를 직렬화해야합니다. A를 Serializable으로 표시하고 싶지 않은 이유는 무엇입니까? – Onots
A는 편집 권한이없는 다른 프로젝트의 일부입니다 –