好的,所以我将一个类序列化为xml,作为HttpResponse发送。部分数据是“状态”列表,我只是无法弄清楚如何按照我需要的方式对其进行格式化。
现在xml响应就像这样:
<user id="x" date="x" ...>
<state>
<state name="Email" />
<Value>email@mail.com</Value>
</state>
</state>
<state>
<state name="Level" />
<Value>0</Value>
</state>
</state>
</user>
我不想要一个元素中的元素,也不是它自己的元素,而是state元素的值。我希望它看起来像
<user id="x" date="x" ...>
<state name="Email">email@email.com</state>
<state name="Level">0</state>
</user>
现在我的课程是:
[XmlRoot("user")]
public class User {
[XmlAttribute]
public int Id { get; set; }
[XmlAttribute]
public DateTime Date { get; set; }
[XmlArray]
public List<State> State { get; set; }
}
public struct State {
[XmlAttribute]
public string Name { get; set; }
public string Value { get; set; }
}
有人能告诉我我做错了什么吗? 我无法更改预期的输出,接收这些响应的服务已经存在且不受我的控制。
感谢。
答案 0 :(得分:1)
您需要将Value
的{{1}}字段标记为XmlText
,将State
的{{1}}字段标记为XmlElement
,然后制作一些次要的元素名称更改,如下所示:
List<State>
顺便说一句,User
要求public struct State
{
[XmlAttribute("name")]
public string Name { get; set; }
[XmlText]
public string Value { get; set; }
public override string ToString()
{
return string.Format("Name={0}, Value=\"{1}\"", Name, Value);
}
}
[XmlRoot("user")]
public class User
{
[XmlAttribute("id")]
public int Id { get; set; }
[XmlAttribute("date")]
public DateTime Date { get; set; }
[XmlElement("state")]
public List<State> State { get; set; }
}
字段值为in a very precise format。如果您的XML日期不是这种格式,则需要手动解析该字段。
然后,当我这样做时:
XmlSerializer
我得到了输出:
DateTime