현재 작업중인 응용 프로그램에서 '프로젝트'에 필요한 모든 데이터가 포함 된 큰 개체 구조를 저장하는 중입니다. 데이터는 사진, 흐름 문서 및 기본적인 데이터 유형과 같은 것들입니다.다른 ISerializable 개체를 포함하는 ISerializable 개체를 serialize
현재, 필자는 현재 저장해야하는 개체 내에 포함 된 모든 클래스에 대해 ISerializable을 구현하고 있습니다. 그러나 언제 :
public class Profile : ISerializable
{
public ObservableCollection<Trade> Trades { get; set; }
public Profile() {}
public Profile(SerializationInfo info, StreamingContext context)
: this()
{
foreach (SerializationEntry entry in info)
{
if (entry.Name.StartsWith("trade"))
{
Type t = entry.ObjectType;
Trades.Add(entry.Value as Trade);
}
}
}
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
int i = 0;
foreach (Trade t in Trades)
{
info.AddValue("trade" + i, t, t.GetType());
i++;
}
}
}
이 발생합니다. 내 목록을 채우는 Trade 클래스도 ISerializable을 구현합니다. 그래서 제가 궁금해하는 것은 이것이 좋은 접근입니까? 그것도 작동합니까? 지금까지 작성한 코드는 작동하지 않으며, 나는 여전히 꼬임 문제를 해결하려고 노력하고 있습니다.
더 구체적으로 info.AddValue ("trade"+ i, t, t.GetType()); Trade 클래스의 ISerializable 메소드를 사용 하시겠습니까? 아니면이 인터페이스는 이러한 유형의 클래스를 처리하기위한 것이 아닙니다.
누군가가 그렇게 친절하고 작은 표정을 지을 때 올바른 방향으로 나를 가리킬 수 있습니다.
감사합니다.
더 구체적인 질문이 아니며 구체적인 코드 예입니다. 미안하다면 미안해. 질문 : 사용자 지정 직렬화를 수행해야하는 클래스가 있고 해당 클래스에 사용자 지정 직렬화가 필요한 개체가 포함되어있는 경우 GetObjectData 메서드에서이를 처리하려면 어떻게해야합니까? 아니면 그게 문제가 아니겠습니까? 아마도 DataContractSerializer와 같은 요소가 필요하거나 아닌지 궁금 할 것입니다. 감사합니다 – vesz
일반적으로 각 클래스는 자체 직렬화 (사용자 지정 또는 기본값)를 담당해야하며 직렬화 가능 클래스를 포함하는 클래스는이를 수행하는 방법을 알거나 신경 쓰지 않아도되며 캡슐화됩니다. ObservableCollection의 직렬화로 인해 문제가 발생할 수 있습니다. 여기에 대한 자세한 정보는 http://kentb.blogspot.com/2007/11/serializing-observablecollection.html입니다. 형식을 serialize하기 만하면 ObservableCollection.CopyTo()를 사용하여 Trade []를 가져 와서 SerializationInfo에 직접 추가 할 수 있어야합니다. – SpeksETC
감사합니다. 매우 도움이됩니다. 아마도 CopyTo()로 충분할 것입니다. 나는 그것이 가능하다는 것을 몰랐다. 기본 유형 이외의 것이라면 목록의 모든 객체를 개별적으로 직렬화해야한다고 생각했습니다. – vesz