XML에 직렬화하는 (속성으로) 객체를 수행하는 방법이 있습니까?

StackOverflow https://stackoverflow.com/questions/390800

  •  23-08-2019
  •  | 
  •  

문제

클래스를 만듭니다 (포맷을 호출하십시오). 해당 클래스에는 데이터 요소 (이름, 시퀀스 번호, 값 - 단지 문자열 등)와 같은 메타 데이터와 같은 속성이 있어야합니다.

이 클래스에는 유형 검증 응용 프로그램 블록 검증 클래스의 속성이 있습니다.

XML로 직렬화하고 실질화하고 싶습니다. 유효성 검사 애플리케이션 블록 속성을 포함한 클래스의 모든 속성이 직렬화에서 살아남는지 확인하십시오.

제안?

올바른 솔루션이 없습니다

다른 팁

.NET 프레임 워크에는 C#을 사용하여 다음과 같이 할 수 있습니다.

// This code serializes a class instance to an XML file:
XmlSerializer xs = new XmlSerializer(typeof(objectToSerialize));

using (TextWriter writer = new StreamWriter(xmlFileName))
{
     xs.Serialize(writer, InstanceOfObjectToSerialize);
} 

그리고이 스 니펫은 XML 파일을 클래스 인스턴스로 다시 해제하는 방법의 예입니다.

// this code creates a class instance from the file we just made:
objectToSerialize newObject;
XmlSerializer xs = new XmlSerializer(typeof(objectToSerialize));

using (TextReader reader = new StreamReader(xmlFileName))
{
    newObject = (ObjectToSerialize) xs.Deserialize(reader);
}

이들이 작동하려면 클래스를 [Serializable] 속성으로 표시해야합니다. XML 출력을 조금 더 예쁘게 만들려면 클래스 속성에 [xmlelement] 및 [xmlattribute] 속성을 사용하여 선택한 스키마로 직렬화하도록 할 수 있습니다.

직렬화를 말함으로써 공식 직렬화 메커니즘을 사용하거나 비슷한 효과를 달성한다는 의미입니까?

객체가 콩이라면 반사를 사용하여 수업을 받고 클래스 이름과 속성을 기록하는 일반 서비스를 작성할 수 있습니다. XML의 재료를 유사하게 읽고 객체를 생성 할 수 있습니다 (이것은 Apache Digester가 본질적으로하는 것입니다).

Jonathon Holland가 말한 것.

그러나 검증에 대해서도 물었습니다. Code Jonathan이 게시 한 코드를 사용하는 경우 모든 속성 ~ 할 것이다 직렬화 및 해제를 올바르게합니다. 그러나 실제로 확인하려면 *.xsd 스키마를 위해 xmlserializer 객체로 설정할 수있는 속성이 있습니다. 사용하여 클래스에서 쉽게 스키마를 만들 수 있습니다. xsd.exe Visual Studio에 포함 된 명령 줄 도구.

또한 클래스의 특정 속성이 속성 또는 요소로 직렬화되는지 여부를 제어 할 수있을 것 같습니다. Jonathon은 그것에 대해 다루었지만 예를 보여주고 싶습니다.

[Serializable]
public class FormElement
{
   [XmlAttribute]
   public string Name {get; set;};

   [XmlAttribute]
   public int Sequence {get; set;};

   [XmlAttribute]
   public string Value {get; set;};

   [XmlElement]
   public Validation OnValidate{get; set;}

   [NonSerialized]
   public string UnimportantProperty {get; set;};

}

마지막으로, 직렬화하려는 모든 속성에 대한 유형은 직렬화 가능해야하며 복잡한 유형은 xmlelements로 직렬화되어야합니다. 그렇지 않으면 당신은 그것을 할 수 없습니다.

xstream 바로 그렇게하는 데 꽤 좋은 Java 도서관입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top