WCF ではサービスを呼び出す際、DataContractSerializer を使って、渡すデータをシリアル化しています。
DataContractSerializer はインスタンス化可能なので、自分でシリアル化・逆シリアル化をすることも、まあ可能です。
DataContractSerializer を使ったサンプルコードは次の通り。
public static string Serialize<T>(T obj) { StringBuilder buffer = new StringBuilder(); using (XmlWriter writer = XmlWriter.Create(buffer)) { DataContractSerializer serializer = new DataContractSerializer(typeof(T)); serializer.WriteObject(writer, obj); } return buffer.ToString(); } public static T Deserialize<T>(string s) { using (StringReader text = new StringReader(s)) using (XmlReader reader = XmlReader.Create(text)) { DataContractSerializer serializer = new DataContractSerializer(typeof(T)); return (T)serializer.ReadObject(reader); } }
あらかじめ DataContractSerializer を使ってシリアル化しておき、サービスに文字列として渡すようにすれば、何でも受け取れるサービスが作れそう。作る意味はほとんど無いですけど。