0

以下のようなクラスをシリアル化しています

 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>
4

2 に答える 2

3

クラスのそのプロパティを XmlAttribute でマークするだけです。

class MyClass{
[XmlAttribute("status")]
public string ErrorStatus { get; set; }
}

編集:

リストを直接シリアライズしていることに気付きました。リストを親クラスの Response 内に配置し、上記の属性をこの Response クラスに追加してから、Response オブジェクトをシリアル化します。

お役に立てれば。

于 2013-03-12T09:43:01.470 に答える
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()
于 2013-03-15T21:51:04.893 に答える