xsd.exe から次のクラスを生成しました。[XML Attribute("...")]
そのため、コードに次のようなものを追加することはできません。
public partial class MethodCheckType {
private WebServiceType[] webServiceField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("WebService")]
public WebServiceType[] WebService {
get {
return this.webServiceField;
}
set {
this.webServiceField = value;
}
}
}
public partial class WebServiceType {
private string uRLField;
private string parameterField;
private string returnValueField;
private CredentialsType credentialsField;
/// <remarks/>
public string URL {
get {
return this.uRLField;
}
set {
this.uRLField = value;
}
}
/// <remarks/>
public string Parameter {
get {
return this.parameterField;
}
set {
this.parameterField = value;
}
}
/// <remarks/>
public string ReturnValue {
get {
return this.returnValueField;
}
set {
this.returnValueField = value;
}
}
/// <remarks/>
public CredentialsType Credentials {
get {
return this.credentialsField;
}
set {
this.credentialsField = value;
}
}
}
たぶん、XSD ファイルを変更する必要があり、クラス コードにこれを再度記述しなければなりませんでした。
理解を深めるために、別のメソッド (以下の「ReadXml」メソッド) が正しく機能することを証明したいと思います。
/// <summary>
/// Reads an XML File in an array of WebServiceType objects.
/// </summary>
/// <param name="path">The filename to read.</param>
/// <returns>An array of WebServiceType Objects.</returns>
public static WebServiceType[] ReadXml(string path)
{
// Is the path NOT a valic UNC path?
if (!IsValidPath(path))
{
Console.Write(MethodCheck.Properties.Resources.ERR003);
return null;
}
XmlSerializer serializer = new XmlSerializer(typeof(MethodCheckType));
MethodCheckType output = null;
StringReader reader = null;
try
{
reader = new StringReader(path);
output = (MethodCheckType)serializer.Deserialize(reader);
}
catch (Exception)
{
throw;
}
finally
{
reader.Dispose();
}
return output.WebService;
}
ReadXml メソッドをチェックするには、WebServiceType オブジェクトの配列をパラメーターとして取り、文字列を返すメソッド (unti テスト用) を作成する必要があります。このメソッドの書き方がわかりません。以下はサンプル文字列です。
編集: このテキストは理解しにくいようです。より明確な方法で定式化しようとします。既に ReadXml メソッドを取得しています。それが正しく機能するかどうかを証明するために、テストメソッドをコーディングしました:
/// <summary>
///A test for ReadXml
///</summary>
[TestMethod()]
public void ReadXmlTest2()
{
string path = @"C:\Users\pp-admin\Documents\Visual Studio 2010\Methodenpruefung der Webservices\Methodenpruefung\Methodenpruefung\BeispielXmlDatei.xml";
string expected = testXMLFile;
string actual;
WebServiceType[] xmlSerialized = WebserviceReader.ReadXml(path);
// Deserialisieren des XML Objekts um einen String zu bekommen
actual = WebServiceType.SerializeToXml(xmlSerialized);
Assert.AreEqual(expected, actual);
Assert.Inconclusive("Verify the correctness of this test method.");
}
メソッド SerializeToXml は WebServiceType オブジェクトの配列を受け取る必要がありますが、サンプルに示されているような完全な XML 文字列を返す必要があります。
/// <summary>
/// This method deserializes an arrayof WebServiceType objects into a XML string.
/// </summary>
/// <param name="services">The WebServiceType object to deserialize.</param>
/// <returns>A XML string.</returns>
public static string SerializeToXml(WebServiceType[] services)
{
XmlSerializer serializer = new XmlSerializer(typeof(MethodCheckType));
MemoryStream ms = null;
StreamReader reader = null;
StringBuilder builder = new StringBuilder();
try
{
ms = new MemoryStream();
reader = new StreamReader(ms);
Object t = (Object)serializer.Deserialize(reader);
}
finally
{
reader.Dispose();
ms.Dispose();
}
return null;
}
私の側では、「シリアライゼーション」と「デシリアライゼーション」が何を意味するのか混乱しているかもしれません。申し訳ありません。しかし、私が正確に何を意味するのかが少し明確になったことを願っています.
編集: まず、以下の回答に感謝します。SerializeToXml メソッドが機能するようになりました。
別の問題があります: 次のコードでエラーが発生します:
[XmlElement(ElementName = "MethodCheck")]
public partial class MethodCheckType { }
エラーメッセージは次のとおりです。
属性 'XmlElement' は、この宣言の種類では無効です。「property、indexer、field、param、return」宣言でのみ有効です。
追加する必要がある別の using 宣言があるでしょうか? または、なぜこれが機能しないのですか?