![](/img/trans.png)
[英]How to include the xsd:documentation in the C# class generated with XSD.exe?
[英]The xsd.exe generated C# class from the W3C XMLschema.xsd (the schema for xsd validation) is not accepted by the C# XmlSerializer
實用程序“ xsd.exe”將生成c#類源代碼,該源代碼以各種方式與xsd模式文件中的信息相對應。
因此,我下載了位於“ http://www.w3.org/2001/XMLSchema”的模式文件“ XMLSchema.xsd”,這是xsd文件本身的模式。
我使用以下命令生成與“模式架構”相對應的C#類:
xsd.exe /classes /namespace:w3c XMLSchema.xsd
到現在為止還挺好。 我在命名空間“ w3c”中得到一個包含C#類“ schema”和其他內容的文件“ XMLSchema.cs”,然后繼續將其添加到C#項目中,該項目還包含以下內容:
try
{
XmlSerializer loader = new XmlSerializer(typeof(w3c.schema));
//never here!! previous line throws!
FileStream fs = new FileStream(
@"M:\src\Interfaces\MyClass1.xsd", FileMode.Open, FileAccess.Read
);
object fromXml = loader.Deserialize(fs);
w3c.schema MyClass1Schema = (w3c.schema)fromXml;
}
catch(Exception e)
{
}
不幸的是,它在try塊的第一行上引發以下錯誤:
當前作用域中已經存在來自命名空間“ http://www.w3.org/2001/XMLSchema”的XML元素“注釋”。 使用XML屬性為元素指定另一個XML名稱或名稱空間。
有沒有人遇到這個錯誤?
我寧願不對生成的文件'XMLSchema.cs'進行任何修改。
我也(最初)嘗試過:
xsd /classes XMLSchema.xsd
(並且C#測試代碼中沒有命名空間)具有相同的結果。
我相信您不能在typeof()中使用名稱空間,而要放置要序列化的對象的名稱(類的實例)。
我猜想問題與.NET命名空間無關,就像您與第二條命令所猜測的一樣,但是與XML命名空間有關。
您似乎遇到的問題是XSD文件定義了XML序列化器已使用的名稱空間(可能是xsd
)(令人驚訝的是,XSD的XSD)。
我不確定XML規范針對具有不同標識符的兩個等效名稱空間的含義,但是解決此問題的正確方法是更改輸入XSD文件的名稱空間。 當然,這將使其無效,但我認為這將阻止XmlSerializer
拋出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.