こんにちは私はサービス契約を結んでおり、その実装では、受け取ったリクエストパラメータをテキストファイルに書き込もうとしています。ここでは、 'TypeA a'の複合オブジェクトがパラメータとして渡されます。入れ子にされた複合オブジェクトのWCF XMLシリアル化
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の値が設定されますか?シリアライザは、すべてがnullの場合、ファイルにこれらをコミットしていない可能性があります。 –
はい、あります。それはnullではありません。 – user832219