我有一个变量失败,可能有三个值:传递,失败或错误。在序列化期间我想要发生的是基于值创建元素。对于传递,我想忽略该元素。对于失败,我想要一个失败元素。对于错误,我想要一个错误元素。怎么办呢?
在Test类中,有一个名为m_steps的步骤列表。在Step中有一个名为m_failure的变量,它保存传递,失败或错误。我希望m_steps创建的元素是非元素(传递),失败或错误。
[XmlRoot("testsuite")]
public class Suite
{
[XmlAttribute("name")]
public string m_name;
[XmlElement("testcase")]
public List<Test> m_tests;
[XmlIgnore]
public string m_timestamp;
public class Test
{
[XmlAttribute("name")]
public string m_name;
[XmlElement("failure")] // want to be ignore, failure or error instead of just failure
public List<Step> m_steps;
[XmlAttribute("assertions")]
public int m_assertions;
}
public class Step
{
[XmlIgnore]
public string m_failure; // holds passed, failure, or error
[XmlTextAttribute]
public string m_message;
[XmlIgnore]
public string m_image;
[XmlAttribute("type")]
public string m_type;
}
寻找:
要:
<?xml version="1.0" encoding="UTF-8"?>
-<testsuite name=" SimpleCalculationsSuite" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-<testcase name="Add 3+4" assertions="1"></testcase>
-<testcase name="Fail 3-4" assertions="1">
<failure type="Text">The control text is not correct. Expected-7 Actual--1</failure>
</testcase>
-<testcase name="Error 3*4" assertions="1">
<error type="Click">The * button was not found</error>
</testsuite>
自:
Suite: SimpleCalculationsSuite
Test:Add 3+4
Passed:Text:The control text, 7, is correct.
Test:Fail 3-4
Failed:Text:The control text is not correct. Expected-7 Actual--1
Test:Error 3*4
Error:Click: The * button was not found
答案 0 :(得分:0)
答案 1 :(得分:0)
我不会在你的例子中使用相同的类,我将举一个自己的例子。
您需要实现方法public bool ShouldSerialize * Name *()其中Name是您希望控制序列化的属性的名称。
例如,我有这个课程:
[Serializable]
public class SerializeExample
{
public string ResultType { get; set; }
public string Error { get; set; }
public string Failure { get; set; }
public List<string> Steps { get; set; }
public bool ShouldSerializeError()
{
return "Error".Equals(ResultType);
}
public bool ShouldSerializeFailure()
{
return "Failure".Equals(ResultType);
}
public bool ShouldSerializeSteps()
{
return ShouldSerializeError() || ShouldSerializeFailure();
}
}
如果我有这个类实例:
SerializeExample ex1 = new SerializeExample { ResultType = "Success" };
然后,只有这个XML被序列化:
<SerializeExample>
<ResultType>Success</ResultType>
</SerializeExample>
如果我创建另一个类并将其序列化:
SerializeExample ex2 = new SerializeExample { ResultType = "Error", Error = "Invalid data from user", Steps = new List<string>() };
然后,生成此XML。
<SerializeExample>
<ResultType>Error</ResultType>
<Error>Invalid data from user</Error>
<Steps />
</SerializeExample>
答案 2 :(得分:0)
我最终修改了Test以包含错误列表。有了这个,我能够在XML文件中同时出现故障和错误节点。我还必须修改一些程序以允许这种情况发生。