C#의 IXmlSerialize 인터페이스에 대한 모범 사례 및 지침
IXmlSerializable
인터페이스를 구현할 때 객체의 적절한 직렬화 및 역직렬화를 보장하려면 특정 지침과 모범 사례를 따라야 합니다.
GetSchema() 메서드
의 IXmlSerializable
메서드는 일반적으로 GetSchema()
을 반환해야 합니다. 공식 문서에 따르면 이 방법은 예약되어 있으므로 사용해서는 안 됩니다. 사용자 정의 스키마를 지정해야 하는 경우 대신 클래스에 null
를 적용하세요. XmlSchemaProviderAttribute
ReadXml() 메서드
WriteXml() 메서드
WriteXml()
하위 개체 처리
예
다음 구현은 위의 지침을 기반으로 합니다.
<code class="language-csharp">public class MyCalendar : IXmlSerializable { [XmlElement] public string Name { get; set; } [XmlElement] public bool Enabled { get; set; } [XmlElement] public Color Color { get; set; } public List<MyEvent> Events = new List<MyEvent>(); public XmlSchema GetSchema() => null; public void ReadXml(XmlReader reader) { reader.MoveToContent(); if (reader.LocalName != "MyCalendar") throw new XmlException("意外的元素名称。"); Name = reader.GetAttribute("Name"); Enabled = bool.Parse(reader.GetAttribute("Enabled")); Color = Color.FromArgb(int.Parse(reader.GetAttribute("Color"))); while (reader.ReadToFollowing("MyEvent")) { var evt = new MyEvent(); evt.ReadXml(reader); Events.Add(evt); } reader.ReadEndElement(); } public void WriteXml(XmlWriter writer) { writer.WriteAttributeString("Name", Name); writer.WriteAttributeString("Enabled", Enabled.ToString()); writer.WriteAttributeString("Color", Color.ToArgb().ToString()); foreach (var evt in Events) { writer.WriteStartElement("MyEvent"); evt.WriteXml(writer); writer.WriteEndElement(); } } }</code>
해당 XML
<code class="language-xml"><mycalendar color="-14069085" enabled="True" name="Master Plan"><myevent start="start-value" stop="stop-value" title="Write Code"></myevent><myevent start="start-value" stop="stop-value" title="???"></myevent><myevent start="start-value" stop="stop-value" title="Profit!"></myevent></mycalendar></code>
구현이 프레임워크의 기대치를 준수하고 안정적인 데이터 직렬화 및 역직렬화를 허용하도록 보장합니다. IXmlSerializable
위 내용은 C#에서 ixmlserializable 인터페이스를 가장 잘 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!