0

私は通常、自分の答えをウェブで高低を検索しますが、今回は空白を描いています. VS2005 を使用して、コードを POST xml から API に記述しています。XML ドキュメントにシリアル化するクラスを C# でセットアップしています。クラスは以下のとおりです。

[Serializable]
    [XmlRoot(Namespace = "", IsNullable = false)]
    public class Request
    {
        public RequestIdentify Identify;

        public string Method;

        public string Params;

    }

    [Serializable]
    public class RequestIdentify
    {
        public string StoreId;

        public string Password;
    }

これをシリアル化すると、次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<Request xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <Identify>
      <StoreId>00</StoreId>
      <Password>removed for security</Password>
   </Identify>
   <Method>ProductExport</Method>
   <Params />
</Request>

しかし、API は「XML が送信されていません」というエラーを返します。

次のようにxmlを文字列で直接送信すると:

string xml = @"<Request><Identify><StoreId>00</StoreId><Password>Removed for security</Password></Identify><Method>ProductExport</Method><Params /></Request>";

このxmlを効果的に送信します(「リクエスト」タグにスキーマ情報はありません):

<Request>
   <Identify>
      <StoreId>00</StoreId>
      <Password>Removed for security</Password>
   </Identify>
   <Method>ProductExport</Method>
   <Params />
</Request>

XML は問題なく認識されているようです。

私の質問は、現在のクラスをシリアライズして XML に変更し、2 番目のケースのように XML を取得するにはどうすればよいかということです。既存のクラスをラップし、この「親」または同様のもので InnerXml プロパティを使用するには、別の「親」クラスが必要だと思いますが、これを行う方法がわかりません。

質問についてお詫び申し上げます。私は C# を 3 か月しか使用しておらず、仕事で独学しなければならない見習い開発者です。

ああ、PS 理由はわかりませんが、VS2005 では、これらのクラスをプライベート変数でセットアップしてから、同等のパブリック変数でゲッターとセッターを使用することを本当に望んでいません。

前もって感謝します :-)

アップデート:

ほとんどの場合と同様に、何を尋ねる必要があるか、またはどのように表現すればよいかわからない場合、答えを見つけるのは非常に困難ですが、次のようになります。

何を探すべきかがわかったら、必要な答えを見つけました。

XML 宣言の削除:

XmlWriterSettings writerSettings = new XmlWriterSettings();
writerSettings.OmitXmlDeclaration = true;
StringWriter stringWriter = new StringWriter();
using (XmlWriter xmlWriter = XmlWriter.Create(stringWriter, writerSettings))
{
    serializer.Serialize(xmlWriter, request);
}
string xmlText = stringWriter.ToString();

名前空間の削除/設定 (これを見つけるのに役立つ上記の返信に感謝します!):

XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");

答えてくれた、または正しい方向に向けてくれたみんなの助けに感謝します! そして、はい、私が何を求めているのかがわかったら、読むべき記事を見つけました:-) 3か月の独学で行き詰まったのは初めてなので、かなりうまくやっていると思います...

4

1 に答える 1

0

ライダルのブログから:

XmlDocument オブジェクトは、既定で名前空間を XML 文字列に割り当て、XML ドキュメントの最初の行として宣言も含めます。私は絶対にそれらを必要としないか、使用しないので、それらを削除する必要があります。これを行う方法は次のとおりです。

XML シリアル化からの宣言と名前空間の削除

于 2012-06-26T13:01:55.120 に答える