在C#/ .NET 2.0中,當我使用XmlSerializer時,我的serialize對象根據XML模式驗證輸出最簡單的方法是什麼?如何驗證XmlSerializer的輸出?
問題是,使用XmlSerializer編寫無效的XML非常容易,而且我找不到驗證XML看起來不麻煩的方法。理想情況下,我期望在XmlSerializer中設置模式或者有一個驗證的XmlWriter。
在C#/ .NET 2.0中,當我使用XmlSerializer時,我的serialize對象根據XML模式驗證輸出最簡單的方法是什麼?如何驗證XmlSerializer的輸出?
問題是,使用XmlSerializer編寫無效的XML非常容易,而且我找不到驗證XML看起來不麻煩的方法。理想情況下,我期望在XmlSerializer中設置模式或者有一個驗證的XmlWriter。
怎麼樣在再次使用驗證讀取器
看完下面就讓我們來刺它
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
你需要有一些處理程序做的時候有錯誤的東西。
您可以使用XmlReader來根據XSD模式驗證XML文件。
確實如此,但這意味着我必須編寫XML,將其存儲在某處並再次閱讀。我希望有一個更簡單的方法可以在飛行中完成。 – 2010-03-09 09:50:02
XmlSerializer不支持針對XSD模式進行驗證,因爲它應該始終有效地生成來自對象的XML。 – 2010-03-09 09:54:38
但情況並非如此。看起來好像所需的元素如果它們的值爲null,則省略。還有可能是XmlSerializer不支持的其他東西(字符串的長度和模式約束,唯一性和關鍵引用)。 – 2010-03-09 10:17:50
在.NET 4中,有事件可以捕獲意外的元素。 – 2013-04-26 16:06:18