【发布时间】:2011-10-03 17:56:03
【问题描述】:
您好,我有一个服务合同,在其实施过程中,我试图将它收到的请求参数写入一个文本文件。此处将“TypeA a”的复合对象作为参数传递。
namespace WebService
{
// NOTE: If you change the interface name "IRequestStatusChanged" here, you must also update the reference to "IRequestStatusChanged" in App.config.
[ServiceContract]
public interface IRequestStatusChanged
{
[OperationContract]
Input StatusChanged(Input In);
}
[Serializable] [DataContract]
public class Input
{
[DataMember]
RequestStatus RS = new RequestStatus();
}
[Serializable] [DataContract]
public class RequestStatus
{
[DataMember]
RequestToken RT = new RequestToken();
[DataMember]
public String State
}
[Serializable] [DataContract]
public class RequestToken
{
[DataMember]
public string Id;
}
}
Implementation of contract
namespace WebService
{
// NOTE: If you change the class name "RequestStatusChanged" here, you must also update the reference to "RequestStatusChanged" in App.config.
public class RequestStatusChanged : IRequestStatusChanged
{
public Input StatusChanged(Input In)
{
/* IFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
Stream outfile = new FileStream(@"C:\test.txt", FileMode.Open,FileAccess.Write);
formatter.Serialize(outfile, In);
outfile.Close(); */
XmlSerializer serializer = new XmlSerializer(typeof(Input));
TextWriter TW = new StreamWriter(@"c:\test.xml");
serializer.Serialize(TW, In);
TW.Close();
return In;
}
}
}
之前我尝试 IFORMATTER 序列化对象并将其写入文本文件,但它不是人类可读的,所以我尝试了 xml 序列化。
当我检查写入的 XML 文件时,它只有“TypeA”对象的标签,而没有将“TypeB”和“TypeC”对象写入文件。我已在服务合同中将所有类标记为 [Serializable]。我想将收到的所有文本或 xml 格式的参数写入一个文件,以便它们可读(一种日志文件)。
【问题讨论】:
-
当你的客户端发送TypeA对象时,它是否为TypeB的TypeC设置了一个值?如果它们都为空,则序列化程序可能不会将它们提交到文件中。
标签: xml wcf serialization object composite