2010-03-09 51 views
6

在C#/ .NET 2.0中,當我使用XmlSerializer時,我的serialize對象根據XML模式驗證輸出最簡單的方法是什麼?如何驗證XmlSerializer的輸出?

問題是,使用XmlSerializer編寫無效的XML非常容易,而且我找不到驗證XML看起來不麻煩的方法。理想情況下,我期望在XmlSerializer中設置模式或者有一個驗證的XmlWriter。

+0

在.NET 4中,有事件可以捕獲意外的元素。 – 2013-04-26 16:06:18

回答

4

怎麼樣在再次使用驗證讀取器

看完下面就讓我們來刺它

Stream stream = new MemoryStream(Encoding.UTF8.GetBytes("<YourXml />")); 
var input = mappingAssembly.GetManifestResourceStream(
      "MySchema.xsd" 
      ); //This could be whatever resource your schema is   
var schemas = new XmlSchemaSet();    
schemas.Add(
    "urn:YourSchemaUrn", 
    XmlReader.Create(
     input 
    ) 
); 

var settings = new XmlReaderSettings 
          { 
           ValidationType = ValidationType.Schema, 
           Schemas = schemas 
          }; 

settings.ValidationEventHandler += MakeAHandlerToHandleAnyErrors; 

var reader = XmlReader.Create(stream, settings); 
while (reader.Read()) {} //Makes it read to the end, therefore validates 

你需要有一些處理程序做的時候有錯誤的東西。

0

您可以使用XmlReader來根據XSD模式驗證XML文件。

+1

確實如此,但這意味着我必須編寫XML,將其存儲在某處並再次閱讀。我希望有一個更簡單的方法可以在飛行中完成。 – 2010-03-09 09:50:02

+0

XmlSerializer不支持針對XSD模式進行驗證,因爲它應該始終有效地生成來自對象的XML。 – 2010-03-09 09:54:38

+0

但情況並非如此。看起來好像所需的元素如果它們的值爲null,則省略。還有可能是XmlSerializer不支持的其他東西(字符串的長度和模式約束,唯一性和關鍵引用)。 – 2010-03-09 10:17:50