我從xsd.exe生成了以下類。這就是爲什麼我不能在代碼中添加[XML Attribute("...")]
之類的東西。將自動生成的類序列化爲XML字符串的示例
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測試)這需要作爲PARAMS 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 { }
的錯誤信息是:
Attribute 'XmlElement' is not valid on this declaration type. Its only valid on 'property, indexer, field, param, return' declarations.
難道還有另一種使用聲明我要補充的嗎?或者爲什麼這不起作用?
你能看到我的樣本串的照片嗎?我不能。 – FluepkeSchaeng 2012-07-13 08:35:47
感謝您糾正空白。 – FluepkeSchaeng 2012-07-13 08:56:05
我不確定你在問什麼。你的意思是你需要採取的陣列的方法'WebServiceType'和串行化* *他們爲XML字符串,這樣的ReadXml可以deserialise他們,你測試你回來的對象是一樣的嗎? – shambulator 2012-07-13 09:00:20