我正在序列化如下的课程
XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
namespaces.Add(string.Empty, string.Empty);
StringWriter sw = new StringWriter();
XmlSerializer serializer1 = new XmlSerializer(typeof(List<student>), new XmlRootAttribute("Response"));
XmlTextWriter xmlWriter = new XmlTextWriter(sw);
serializer1.Serialize(xmlWriter, ls, namespaces);
sw.ToString()
下方的结果字符串
<?xml version="1.0" encoding="utf-16"?>
<Response><student><name>xxx</name></student></Response>
但是,如何向根元素添加属性(响应)? 喜欢下面的一个
<?xml version="1.0" encoding="utf-16"?>
<Response status="1"><student><name>xxx</name></student></Response>
答案 0 :(得分:3)
您只需要使用XmlAttribute标记该类的属性,即
class MyClass{
[XmlAttribute("status")]
public string ErrorStatus { get; set; }
}
编辑:
刚刚意识到你正在直接序列化列表。将列表放在父类Response中,并将以上属性添加到此Response类,然后序列化Response对象。
希望这有帮助。
答案 1 :(得分:1)
您可以创建包含该列表的另一个对象,然后创建一个属性以将该属性添加到根节点。
诀窍是在这个新类的列表前面加上对Student类型的显式类型赋值,以避免列表嵌套在另一个父节点中。
[XmlType(TypeName = "Response")]
public class ResponseObject
{
[XmlAttribute("status")]
public string file { get; set; }
[XmlElement("Student", Type = typeof(Student))]
public List<Student> studentList { get; set; }
}
您的代码将如下所示
XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
namespaces.Add(string.Empty, string.Empty);
StringWriter sw = new StringWriter();
XmlSerializer serializer1 = new XmlSerializer(typeof(ResponseObject));
XmlTextWriter xmlWriter = new XmlTextWriter(sw);
//Creating new object and assign the existing list and status
ResponseObject resp = new ResponseObject();
resp.studentList = ls;
resp.status = 1;
//Serialize with the new object
serializer1.Serialize(xmlWriter, resp, namespaces);
sw.ToString()