USPSトラッキングAPIを使用しています。私は以下に列挙したように、要求の仕様を持っています。C#XMLSerializerを使用して、同じ名前で配列ではなく複数の子要素を許可できるXML要求を作成するには
<TrackFieldRequest PASSWORD="" USERID="prodsolclient" APPID="">
<Revision>1</Revision>
<ClientIp>111.0.0.1</ClientIp>
<TrackID ID="5551212699300000962610" />
</TrackFieldRequest>
ユーザーマニュアルには、「Webツールサーバーに入力された各要求に最大10個のトラッキングIDが含まれる可能性があります」と記載されています。
これは、TrackFieldRequestが最大10個のTrackID子要素を持つことができると解釈します。ただし、これらの複数のTrackID要素は配列内にあるとは定義されていません。それらは、TrackFieldRequest要素の最大10個の連続したTrackID子要素です。
したがって、10個のTrackID子要素を含める場合は、XMLSerializerに渡すCLRオブジェクトを構築する方法がわかりません。
"List TrackIds"というプロパティを持つTrackFieldRequestクラスを作成しようとしましたが、USPS Webサイトから "The element 'TrackFieldRequest'に無効な子要素 'TrackIds'があります。 : 'TrackID' "
XMLSerializerでTrackFieldRequestクラスのListまたはArrayプロパティを使用せずに、最大10個のTrackID子要素を生成するためにCLRクラスをモデル化するにはどうすればよいですか?ここで
は私の現在のTrackFieldRequestクラスは、ここで
public class TrackFieldRequest
{
// Based upon USPS Web Tools API User Guide(Track & Confirm API) version 3.3 dated 2/28/16
// at https://www.usps.com/business/web-tools-apis/track-and-confirm-api.pdf
[XmlAttribute("USERID")]
public string UserId { get; set; }
[XmlElement("Revision")]
public int Revision { get; set; }
[XmlElement("ClientIp")]
public string ClientIp { get; set; }
[XmlElement("SourceIdZIP")]
public string SourceIdZip { get; set; }
public List<TrackId> TrackIds { get; set; }
}
である私の現在のTrackIDクラスは、ここで
public class TrackId
{
// Based upon USPS Web Tools API User Guide(Track & Confirm API) version 3.3 dated 2/28/16
// at https://www.usps.com/business/web-tools-apis/track-and-confirm-api.pdf
public TrackId(string a_Id, string a_destinationZipCode, string a_mailingDate)
{
ID = a_Id;
DestinationZipCode = a_destinationZipCode;
MailingDate = a_mailingDate.ToString();
}
// Parameterless constructor is needed for the XMLSerializer
public TrackId()
{
}
[XmlAttribute]
public string ID { get; set; }
[XmlElement("DestinationZipCode")]
public string DestinationZipCode { get; set; }
[XmlElement("MailingDate")]
public string MailingDate { get; set; }
}
あるのXmlWriterに
private string ConvertTrackingRequestToXml(TrackFieldRequest a_trackingRequest)
{
try
{
var xmlWriterSettings = new XmlWriterSettings
{
Encoding = new UTF8Encoding(false),
Indent = true,
IndentChars = "\t"
};
XmlSerializer xmlSerializer = new XmlSerializer(a_trackingRequest.GetType());
using (StringWriter stringWriter = new StringWriter())
using (XmlWriter xmlWriter = XmlWriter.Create(stringWriter, xmlWriterSettings))
{
xmlSerializer.Serialize(xmlWriter, a_trackingRequest);
return stringWriter.ToString();
}
}
catch (Exception ex)
{
Logger.LogError("Could not convert tracking request into Xml.", ex);
return null;
}
}
を使用してXMLにCLRクラスを変換するための私の方法です
私は、XmlSerializerを手動で構築するのではなく、 t可能であれば、文字列ビルダのXML文字列。
アイデア?
お手数ですがお寄せいただきありがとうございます。
を試してみてください。 CLRクラスオブジェクトとXMLSerializerを使用してこのリクエストを作成するという洗練されたソリューションがあることを期待していましたが、これを見つけることができず、プロジェクトを進める必要があります。あなたの助けに感謝、jdweng – EiEiGuy