> 백엔드 개발 > C++ > C#에서 ixmlserializable 인터페이스를 가장 잘 구현하는 방법은 무엇입니까?

C#에서 ixmlserializable 인터페이스를 가장 잘 구현하는 방법은 무엇입니까?

DDD
풀어 주다: 2025-01-27 14:36:14
원래의
902명이 탐색했습니다.

How to Best Implement the IXmlSerializable Interface in C#?

C#의 IXmlSerialize 인터페이스에 대한 모범 사례 및 지침

IXmlSerializable 인터페이스를 구현할 때 객체의 적절한 직렬화 및 역직렬화를 보장하려면 특정 지침과 모범 사례를 따라야 합니다.

GetSchema() 메서드

IXmlSerializable 메서드는 일반적으로 GetSchema()을 반환해야 합니다. 공식 문서에 따르면 이 방법은 예약되어 있으므로 사용해서는 안 됩니다. 사용자 정의 스키마를 지정해야 하는 경우 대신 클래스에 null를 적용하세요. XmlSchemaProviderAttribute

ReadXml() 메서드

    XML을 읽을 때 object 요소가 작성되어 있어야 합니다. 객체의 속성을 읽은 후 판독기를 다음 요소로 이동합니다.
  • 리더를 포장 개체의 닫는 요소로 이동하세요.

WriteXml() 메서드

  • 내에서 프레임워크는 래핑 요소 작성을 담당합니다. 구현에서는 이 래퍼 내에서 객체의 속성만 작성해야 합니다. WriteXml()
  • 루트 요소가 이미 작성되었다고 가정하므로 객체의 루트 요소를 작성하지 마세요.

하위 개체 처리

    하위 개체는 상위 개체와 유사한 방법을 사용하여 작성해야 합니다.
  • 각 하위 개체는 자체 XML 요소에 작성되어야 합니다.

다음 구현은 위의 지침을 기반으로 합니다.

<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿