2

C# でオブジェクトに解析したい次の XML ファイルがあります。

そこで、デスクトップ用の VS Express 2013でこの xml ファイルを開き、 [XML] -> [スキーマの生成] メニュー オプションをクリックしました。これにより、次の 2 つの XSD スキーマ ファイルが生成されました。

次に、 xsd.exeツール (.NET SDK に付属) を使用して、次のようなスキーマから C# クラス ファイルを生成するバッチ スクリプトを作成しました。

@ECHO off
set xsdFile="C:\Users\Administrator\Desktop\test\001-0180914-5787994.xsd"
set outDirectory="C:\Users\Administrator\Desktop\test\out"
set xsdExeDir="C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools"
set language="CS"
cd %xsdExeDir%
xsd.exe "%xsdFile%" "C:\Users\Administrator\Desktop\test\001-0180914-57879941.xsd" /c /out:"%outDirectory%" /l:"%language%"
pause

上記のバッチ スクリプトを実行すると、次の C# クラスが生成されました。

最後に、これをテスト コンソール アプリ プロジェクトに追加し、XML ファイルとこの自動生成されたクラスからオブジェクトを生成しようとしました。

class Program
{
    static void Main(string[] args)
    {
        try
        {
            var order = Parse("001-0180914-5787994.xml");
            Console.WriteLine("Success !!!");
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error: " + ex.Message);
        }
        Console.WriteLine("Press any key to exit...");
        Console.Read();
    }

    public static OrderResponseDetailComplete Parse(String XMLFile)
    {
        var settings = new XmlReaderSettings();
        var obj = new OrderResponseDetailComplete();
        var reader = XmlReader.Create(XMLFile, settings);
        var serializer = new XmlSerializer(typeof(OrderResponseDetailComplete));
        obj = (OrderResponseDetailComplete)serializer.Deserialize(reader);
        reader.Close();
        return obj;
    }
}

テスト プログラムを実行すると、次のエラーが発生します。

ここに画像の説明を入力

このエラーはどういう意味ですか? どうすれば修正できますか?

4

1 に答える 1

0

最初のリンク (XML) から、xsi:type83 行目に表示されます。

このエラーの詳細については、「ローカルの complexType に xsi:type を指定することは有効ですか? 」を参照してください。

私が知る限りOrderLineItemItemResponse、XSD で型を定義する必要があります。

問題は XML にありますが、解決策は XSD にあります。正当で検証に合格するには、タイプを定義する必要があります。たとえば、最初の XSD は を定義しますOrderResponseDetailComplete。の XSD はどこにありOrderLineItemItemResponseますか?

ユース ケースによっては、これが実行可能な解決策になる場合があります。置換グループを使用して xsd.exe によって生成されたコードからシリアル化された XML は無効です (無効な xsi:type エラー)

于 2014-09-23T10:04:51.190 に答える