사전 멤버가 포함된 클래스 직렬화
사전 멤버가 포함된 클래스(예: 구성 파일 클래스)를 직렬화하려고 하면 다음 오류가 발생할 수 있습니다.
<code>System.NotSupportedException: 无法序列化成员 App.Configfile.mappedDrives</code>
이 오류는 기본적으로 사전 유형을 직접 직렬화할 수 없음을 의미합니다. 이 문제를 해결하려면 사용자 지정 직렬화 메커니즘을 구현하는 것이 좋습니다.
맞춤형 사전 직렬화
한 가지 방법은 Dictionary<TKey, TValue>
에서 상속하고 IXmlSerializable
인터페이스를 구현하는 사용자 정의 클래스를 만드는 것입니다. 다음 코드 조각은 이 구현을 보여줍니다.
<code class="language-csharp">using System; using System.Collections.Generic; using System.Xml.Serialization; [XmlRoot("dictionary")] public class SerializableDictionary<TKey, TValue> : Dictionary<TKey, TValue>, IXmlSerializable { public void ReadXml(System.Xml.XmlReader reader) { XmlSerializer keySerializer = new XmlSerializer(typeof(TKey)); XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue)); bool wasEmpty = reader.IsEmptyElement; reader.Read(); if (wasEmpty) return; while (reader.NodeType != System.Xml.XmlNodeType.EndElement) { reader.ReadStartElement("item"); reader.ReadStartElement("key"); TKey key = (TKey)keySerializer.Deserialize(reader); reader.ReadEndElement(); reader.ReadStartElement("value"); TValue value = (TValue)valueSerializer.Deserialize(reader); reader.ReadEndElement(); this.Add(key, value); reader.ReadEndElement(); reader.MoveToContent(); } reader.ReadEndElement(); } public void WriteXml(System.Xml.XmlWriter writer) { XmlSerializer keySerializer = new XmlSerializer(typeof(TKey)); XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue)); foreach (TKey key in this.Keys) { writer.WriteStartElement("item"); writer.WriteStartElement("key"); keySerializer.Serialize(writer, key); writer.WriteEndElement(); writer.WriteStartElement("value"); TValue value = this[key]; valueSerializer.Serialize(writer, value); writer.WriteEndElement(); writer.WriteEndElement(); } } }</code>
사용자 정의 사전은 IXmlSerializable
을 구현하여 XML 직렬화에 참여할 수 있습니다.
사용방법
사용자 정의 사전이 정의되면 프로필 클래스에 필수 키-값 쌍을 저장하는 데 사용할 수 있습니다.
<code class="language-csharp">public class ConfigFile { ... public SerializableDictionary<string, string> mappedDrives = new SerializableDictionary<string, string>(); ... }</code>
이 접근 방식을 사용하면 직렬화 오류 없이 구성 파일 클래스를 직렬화 및 역직렬화할 수 있습니다.
위 내용은 구성 파일에 대한 클래스에서 사전 멤버를 직렬화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!