【发布时间】:2023-03-20 08:30:01
【问题描述】:
我需要将具有 List 属性的对象序列化为 XML 以获得这样的 XML 代码(我知道它不是有效的 XML,但我的第 3 方应用程序需要这种格式):
<Filters>
<Criteria_0 Parameter="STATUS"
Operator="EQUAL"
Value="STARTED" />
<Criteria_1 Parameter="STATUS"
Operator="EQUAL"
Value="COMPLETED" />
</Filters>
我写了这样的代码:
public class JobStatusListTask
{
public JobListSettings ListSettings;
public List<JobFilterCriteria> Filters;
public JobStatusListTask()
{
Filters = new List<JobFilterCriteria>();
Filters.Add(new JobFilterCriteria("STATUS", CriteriaOperator.Equal, "ERROR"));
}
public JobStatusListTask(JobListSettings settings) : this()
{
ListSettings = settings;
}
}
public class JobFilterCriteria : IXmlSerializable
{
public static int Count = 0;
public string Parameter;
public CriteriaOperator Operator;
public string Value;
private JobFilterCriteria()
{
Parameter = string.Empty;
Value = string.Empty;
}
public JobFilterCriteria(string parameter, CriteriaOperator criteriaOperator, string value)
{
Parameter = parameter;
Operator = criteriaOperator;
Value = value;
}
XmlSchema IXmlSerializable.GetSchema()
{
return null;
}
void IXmlSerializable.ReadXml(XmlReader reader)
{
throw new NotImplementedException();
}
void IXmlSerializable.WriteXml(XmlWriter writer)
{
writer.WriteStartElement(string.Format("Criteria_{0}", Count++));
writer.WriteAttributeString("Parameter", Parameter);
writer.WriteAttributeString("Operator", Operator.ToString());
writer.WriteAttributeString("Value", Value);
}
}
它工作得几乎完美。序列化程序返回带有不必要 JobFilterCriteria 元素的 XML 代码。
<?xml version="1.0" encoding="utf-8"?>
<Filters>
<JobFilterCriteria>
<Criteria_0
Parameter="STATUS" Operator="Equal" Value="ERROR" />
</JobFilterCriteria>
<JobFilterCriteria>
<Criteria_1
Parameter="STATUS" Operator="Equal" Value="STARTED" />
</JobFilterCriteria>
</Filters>
从 XML 代码中删除 JobFilterCriteria 需要进行哪些更改?
【问题讨论】:
标签: c# .net xml xml-serialization