那个类要用[Serializable]标记 [Serializable()] public class TestSimpleObject { public int member1; public string member2; public string member3; public double member4; // A field that is not serialized. [NonSerialized()] public string member5; public TestSimpleObject() { member1 = 11; member2 = "hello"; member3 = "hello"; member4 = 3.14159265; member5 = "hello world!"; }
本文用比较简短的文字讲述了在.net中序列化化对象的三种方式,然后讲述各种方式之间的区别以及在序列化对象时要注意的一些事项。
{
reader.ReadStartElement();
reader.Read();
XmlSerializer itemSerializer = new XmlSerializer(typeof(MyType));
//反序列化
Object obj = itemSerializer.Deserialize(reader);
while (obj != null)
{
this.m_list.Add(obj as Data);
obj = itemSerializer.Deserialize(reader);
}
reader.ReadEndElement();
} public void WriteXml(System.Xml.XmlWriter writer)
{
writer.WriteStartElement(MyType.FullName);
XmlSerializer xs = new XmlSerializer(MyType);
foreach (Data d in this.m_list)
{
//序列化
xs.Serialize(writer, d);
}
writer.WriteEndElement();
}
就是说我WebService里写的方法返回的就是我需要的对象,在前台不做任何处理
{
response.setContentType("application/octet-stream");
OutputStream out = response.getOutputStream(); ByteArrayOutputStream bout = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bout);
oos.writeObject(responseObject);
oos.flush();
byte[] byteArry = bout.toByteArray();
bout.close();
oos.close();
out.write(byteArry);
out.flush();}
//Client端receiveObjectResponse( )
{
HttpClient client = new HttpClient(); String url = "http:////localhost:9080/test";
PostMethod postMethod = new PostMethod( url ); client.executeMethod( postMethod ); InputStream bin = postMethod.getResponseBodyAsStream();
ObjectInputStream ois = new ObjectInputStream(bin); // get the Object
result = ois.readObject();
bin.close();
ois.close(); // close the post connection
postMethod.releaseConnection();}
我晕,能这样我还问啥
就是说我WebService里写的方法返回的就是我需要的对象,在前台不做任何处理
[/Quote]
这,还不是我在1楼说的那样的吗?
[WebMethod]
public MyData MyMethod(......)
客户端调用MyMethod,就可以直接得到MyData,是吗?
[Serializable()]
public class TestSimpleObject { public int member1;
public string member2;
public string member3;
public double member4; // A field that is not serialized.
[NonSerialized()]
public string member5; public TestSimpleObject() { member1 = 11;
member2 = "hello";
member3 = "hello";
member4 = 3.14159265;
member5 = "hello world!";
}
客户端也可以不引用那个类的dll,只要添加web引用,引用那个服务,就可以自动生成客户端用的类,包括那个实体类。
[Serializable]
public class abstractAB : abstractA ,IXmlSerializable
{ public string test = "123123";
public override string GetStirng()
{
return "";
} public abstractAB() { } #region IXmlSerializable 成员 public System.Xml.Schema.XmlSchema GetSchema()
{
throw new NotImplementedException();
} public void ReadXml(XmlReader reader)
{
reader.Read();
reader.ReadStartElement();
reader.ReadAttributeValue();
test = reader.Value;
reader.Read();
reader.ReadEndElement();
} public void WriteXml(XmlWriter writer)
{
writer.WriteStartElement("abstractAB");
writer.WriteStartAttribute("ClassName");
writer.WriteValue("abstractAB");
writer.WriteEndAttribute();
writer.WriteValue(test);
writer.WriteEndElement();
} #endregion
}
简单的写了一下IXmlSerializable接口
WriteXml就是自己组装xml。
ReadXml 就是自己解析xml,还原