我从 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 方法,我必须编写一个方法(用于 unti 测试),该方法将 WebServiceType 对象数组作为参数并返回一个字符串。我不知道如何编写这个方法。下面是一个示例字符串:
编辑: 这段文字似乎很难理解。我将尝试以更清晰的方式来表述它:我已经有了 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”在此声明类型上无效。它仅对“属性、索引器、字段、参数、返回”声明有效。
我必须添加另一个 using 声明吗?或者为什么这不起作用?