簡體   English   中英

從W3C XMLschema.xsd(用於xsd驗證的模式)生成的xsd.exe C#類未被C#XmlSerializer接受

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM