さて、タイトルはそれ自体を説明していると思います。
構成オブジェクトをワイヤーを介してエクスポートしようとしていますが、非常に難しいように見えます。クラスはシリアル化できず、...封印されているため、ここに遺産はありません。
誰かが前にこのようなことをしたように?
よろしく
さて、タイトルはそれ自体を説明していると思います。
構成オブジェクトをワイヤーを介してエクスポートしようとしていますが、非常に難しいように見えます。クラスはシリアル化できず、...封印されているため、ここに遺産はありません。
誰かが前にこのようなことをしたように?
よろしく
本当に必要なビットを取り出して、シリアル化可能で、WCFシリアル化の属性を持つ別のクラスに配置する必要が[DataContract]
あり[DataMember]
ます。次に、もう一方の端で逆の操作を行う必要があります。
WCFは、XML形式でシリアル化されたデータのみを送信します。データをそのままシリアル化できない場合は、自分で回避する必要があります。これを別の方法で解決するための特効薬はありません...
あるクラスから別のクラスに多くのプロパティをコピーする手間を軽減するために、あるオブジェクトから別のオブジェクトに割り当てる退屈で反復的なコードの多くを排除できるAutoMapperなどのライブラリを使用することをお勧めします。
このクラスは、アプリケーションの構成ファイルにアクセスするためのパススルーです。シリアル化することはあまり意味がありませんが、値を引き出して、制御する新しいクラスに詰め込むことをお勧めします。次に、新しいクラスがシリアル化可能であることを確認するだけです。
さて、私はこの問題の良い解決策を見つけたと思います。Configurationオブジェクト自体ではなく、セクションをシリアル化することで通過します。したがって、必要なすべてのセクションをまとめてシリアル化/逆シリアル化するために、すべてを1つのConfigurationSectionGroupにラップしました。私はその仕事をしており、WCFサービスを介して、または直接ファイルに設定をエクスポートおよびインポートすることができます。これが私が使用したコードです:
構成セクションの基本クラス:
public abstract class ConfigurationSectionBase : ConfigurationSection
{
public string Serialize()
{
return SerializeSection(null, Name, ConfigurationSaveMode.Minimal);
}
public void Deserialize(string configuration)
{
XmlReader reader = XmlReader.Create(new StringReader(configuration));
if (!reader.ReadToFollowing(Name)) return;
StringBuilder stringBuilder = new StringBuilder().Append(reader.ReadOuterXml());
var stringReader = new StringReader(stringBuilder.ToString());
reader = XmlReader.Create(stringReader);
DeserializeSection(reader);
}
}
それが誰かを助けることを願っています...
よろしく