C #의 기본 직렬화 기능을 사용하여 다음 클래스를 직렬화하고 싶습니다.
public class DevicePolicy
{
public enum SharingLevel
{
Unrestricted,
Blocked
}
public SharingLevel SHARING_LEVEL = SharingLevel.Blocked;
public bool REQUIRES_AUTHENTICATION = false;
public List<string> MANAGED_LIST = new List<string>();
}
이에:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="SHARING_LEVEL">BLOCKED</string>
<boolean name="REQUIRES_AUTHENTICATION" value="false" />
<set name="MANAGED_LIST">
<string>blah</string>
</set>
</map>
참고 : 변경할 수없는 다른 항목에 의해 사용되기 때문에 Xml의 모양을 제어 할 수 없습니다. 그래서 저는 이것을 정확히 일치시켜야합니다.
이 작업을 수행하는 데 어려움이 있으며 이러한 사용자 지정 형식으로 C #의 기본 제공 직렬화 작업을 수행하려는 경우 대신 내 자신의 SerializeXml 및 DeserializeXml 메서드를 작성하는 것이 더 나은지 궁금해하기 시작했습니다.
누군가가 이것을하는 쉬운 방법을 알고 있다면 정말 도움을 주시면 감사하겠습니다.
사용자 정의가 필요한 경우 총알을 물고 클래스 IXmlSerializable
가 사용자 정의 직렬화를 수행하도록 구현 해야 할 수 있습니다. 다음은 SharingLevel
객체 를 직렬화하는 예제입니다 . 나머지는 사용자가 수행하도록 남겨 둡니다.
public class DevicePolicy : IXmlSerializable
{
public enum SharingLevel
{
Unrestricted,
Blocked
}
public SharingLevel SHARING_LEVEL = SharingLevel.Blocked;
public bool REQUIRES_AUTHENTICATION = false;
public List<string> MANAGED_LIST = new List<string>();
public XmlSchema GetSchema()
{
return null;
}
public void ReadXml(XmlReader reader)
{
throw new NotImplementedException(); //TODO
}
public void WriteXml(XmlWriter writer)
{
//Root
writer.WriteStartElement("map");
//The element for "SharingLevel SHARING_LEVEL"
writer.WriteStartElement("string");
writer.WriteAttributeString("name", "SHARING_LEVEL");
writer.WriteString(SHARING_LEVEL.ToString().ToUpperInvariant());
writer.WriteEndElement();
//The element for "bool REQUIRES_AUTHENTICATION"
writer.WriteStartElement("boolean");
throw new NotImplementedException(); //TODO
}
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다