2009-11-28 3 views
0

IXmlSerializable을 구현하려고합니다. 내 클래스는 serializable을 구현하고 단일 문자열을 씁니다. XsdDataContractExporter (표준 것)를 사용하여 객체 그래프 스키마를 내보낼 수 있기를 바랍니다.유효한 XmlSchema를 사용하여 IXmlSerializable (XMLSchema : 스키마 요소가 선언되지 않았습니다 ..)

클래스는 간단한 xml로 직렬화됩니다.

 
<Urn ns='http://palantir.co.za/urn'>somestring</Urn> 

XmlSchemaProvider 특성에 해당하는 GetSchema를 구현 한 내용은 다음과 같습니다.

스키마를 생성하고 내보낼 수 있어야합니다.

public static XmlQualifiedName GetSchema(XmlSchemaSet xs) 
    { 
     string ns = "http://palantir.co.za/urn"; 
     if (xs.Schemas("http://palantir.co.za/urn").Count != 0) 
      return new XmlQualifiedName("Urn", ns); // tried many. 

     XmlSchema schema = new XmlSchema(); 
     schema.Namespaces.Add("xs", XmlSchema.Namespace); 
     schema.Namespaces.Add("Urn", ns); // tried many prefixes. 
     schema.ElementFormDefault = XmlSchemaForm.Qualified; 
     schema.Items.Add(
      new XmlSchemaElement() {      
       Name = "Urn", 
       SchemaTypeName = XmlSchemaType.GetBuiltInSimpleType(XmlTypeCode.String).QualifiedName 
      }); 

     schema.TargetNamespace = ns; 
     xs.Add(schema); 
     //xs.Compile(); 
     return new XmlQualifiedName("Urn", schema.TargetNamespace); 
    } 

나는 다음과 같은 오류가 발생합니다 :

The http://www.w3.org/2001/XMLSchema:schema element is not declared..
내가 스키마를 내보낼 때.

+0

'스키마 내보내기': 구현을 위해 XML 파일에 추가 할 때 의미합니까? –

답변

0

XSD 스키마를 별도의 파일로 작성해보십시오. 런타임시 작성하는 것이 훨씬 쉽습니다. 부양해야합니다. 어셈블리로 xsd 스키마를 리소스로 배치합니다. 는 그런 다음 GetSchema 방법에 그냥 역 직렬화 :

using (Stream stream = assembly.GetManifestResourceStream(resourceName)) 
{ 
    return XmlSchema.Read(stream, null); 
} 

은 또한 당신의 방법 GetSchema 어떤 (드) 직렬화에 런타임에 호출되는 것을 알 수 있습니다. 스키마를 매번 desirializing하지 않는 것이 좋습니다.

관련 문제