您好,我想在C#中使用XMLSerializer序列化这两个类:
Paquete.cs
using UnityEngine;
using System.Collections;
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
using System.IO;
[XmlRoot("Paquete")]
public class Paquete {
//El identificador del paquete. Aqui ira la accion que se esta enviando en el juego
public enum Identificador
{
moverIzquierda,
moverDerecha,
moverArriba,
moverAbajo,
avanzar,
disparar,
Null
}
public Identificador identificadorPaquete;
public int jugador;
//[XmlArray("B"),XmlArrayItem("Bullet")]
public List<Bullet> bullets = new List<Bullet> ();
// Default Constructor
public Paquete()
{
this.identificadorPaquete = Identificador.Null;
this.jugador = -1;
this.bullets = new List<Bullet> ();
}
// Convierte un paquete a un data stream para enviar y recibir datos
//Tambien lo debemos modificar para que se acople a las acciones del juego
public string GetDataStream()
{
string result = "";
XmlSerializer serializer = new XmlSerializer (typeof(Paquete));
StringWriter writer = new StringWriter ();
serializer.Serialize (writer, this);
result = writer.ToString ();
Debug.Log ("El xml: "+result);
return result;
}
}
Bullet.cs
using System.Collections;
using System.Xml;
using System.Xml.Serialization;
using System.IO;
public class Bullet {
//[XmlAttribute("id")]
int id;
//[XmlAttribute("px")]
float px;
//[XmlAttribute("py")]
float py;
//[XmlAttribute("pz")]
float pz;
//[XmlAttribute("rx")]
float rx;
//[XmlAttribute("ry")]
float ry;
//[XmlAttribute("rz")]
float rz;
public Bullet(){
this.px = 0;
this.py = 0;
this.pz = 0;
this.rx = 0;
this.ry = 0;
this.rz = 0;
}
public Bullet(int id,float px,float py, float pz,float rx,float ry,float rz){
this.id = id;
this.px = px;
this.py = py;
this.pz = pz;
this.rx = rx;
this.ry = ry;
this.rz = rz;
}
}
这是我用来测试我的代码的原因:
Paquete p = new Paquete ();
p.jugador = 6;
string s;
p.bullets.Add (new Bullet(0,1,1,1,1,1,1));
p.bullets.Add (new Bullet (1,2, 2, 2, 2, 2, 2));
s = p.GetDataStream ();
我得到的xml是这样的:
<?xml version="1.0" encoding="utf-16"?>
<Paquete xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<identificadorPaquete>Null</identificadorPaquete>
<jugador>6</jugador>
<bullets>
<Bullet />
<Bullet />
</bullets>
</Paquete>
如您所见,Bullet数组不包含我在班级中定义的任何属性。
任何人都可以帮助我吗?
答案 0 :(得分:2)
XmlSerializer并未考虑私人字段,因为他们没有在输出中显示原因。如果您将这些变量公开并使用XmlAttribute标记它们,您可以在结果XML中看到它们:
如果你改变它
[XmlAttribute("id")]
public int id;
你得到:
<?xml version="1.0" encoding="utf-16"?>
<Paquete xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<identificadorPaquete>Null</identificadorPaquete>
<jugador>6</jugador>
<bullets>
<Bullet id="0" />
<Bullet id="1" />
</bullets>
</Paquete>