2011-11-11 55 views
2

我確實使用xsd.exe(VS 2010命令提示符), 生成了C#類表單scham,但是當我將類序列化爲xml文件時,在out文件中我沒有用於模式的條目。從xml架構生成的CS類

序列化的XML:

<?xml version="1.0" encoding="utf-16"?> 
<Dokumenty xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" idSystemuLokalnego="ASD" dataUtworzenia="0001-01-01T00:00:00"> 
<Wniosek> 
    <Beneficjent /> 
</Wniosek> 

當我試着使用模式使用代碼來驗證:

 //Serilalize xml to string 
     StringWriter sw = new StringWriter(); 
     XmlTextWriter xw = new XmlTextWriter(sw); 
     x.Serialize(xw, doc); 
     String xml = sw.ToString(); 

     StringReader sr = new StringReader(xml); 
     XmlTextReader xtr = new XmlTextReader(sr); 
     XmlReaderSettings settings = new XmlReaderSettings(); 
     settings.Schemas.Add("", "schemas\\SimWniosekApl_v2.0.xsd"); 
     settings.ValidationType = ValidationType.Schema; 

     //XmlReader reader = XmlReader.Create(xtr); 
     XmlDocument document = new XmlDocument(); 
     document.Load(xtr); 

     ValidationEventHandler eventHandler = new ValidationEventHandler(ValidationHandler); 

     // the following call to Validate succeeds. 
     document.Validate(eventHandler); 

它失敗,出現異常: 附加信息:證件上的XmlSchemaSet要麼是null,要麼沒有模式。在調用Validate之前提供模式信息。

我該怎麼做?

回答

0

您需要在創建閱讀器時應用XmlReaderSettings。

該代碼對設置無效。在創建設置之前,已經創建了讀者。代碼只是創建設置,然後忘記它們。

StringReader sr = new StringReader(xml); 
    //XmlTextReader xtr = new XmlTextReader(sr); 
    XmlReaderSettings settings = new XmlReaderSettings(); 
    settings.Schemas.Add("", "schemas\\SimWniosekApl_v2.0.xsd"); 
    settings.ValidationType = ValidationType.Schema; 

    XmlReader reader = XmlReader.Create(xtr,settings); 
    XmlDocument document = new XmlDocument(); 
    document.Load(reader); 

    ValidationEventHandler eventHandler = new ValidationEventHandler(ValidationHandler); 
    document.Validate(eventHandler); 

這裏有一個完整的例子:
http://msdn.microsoft.com/en-us/library/ms162371.aspx