それはあなたのデータコントラクトを設定した方法によって異なります。
すべての既定値を使用するWCFでは、サービスがDataContractSerializer(DCS)を使用してオブジェクトをXMLにシリアル化します。 DCSはフィールドを順番にシリアル化します。最初はパブリックフィールド、プライベートフィールドです。各可視性グループ内で、フィールド/プロパティを名前順にアルファベット順に並べ替えます。古いXMLが
<YourObject>
....
<FirstName>.....</FirstName>
<LastName>.....</LastName>
</YourObject>
されているだろうし、あなたの新しいものは、単に新しいを追加します。あなたは新しいパブリックプロパティMiddleName
を導入し、すでにFirstName
とLastName
を持っていた場合
したがって、あなたは大丈夫だろう最後のプロパティ:
<YourObject>
....
<FirstName>.....</FirstName>
<LastName>.....</LastName>
<MiddleName>....</MiddleName>
</YourObject>
このような更新は、「最後に何かを追加」がうまく動作するはずです、DCSは、単にXMLで追加のタグを無視します。
しかし:あなたは、データコントラクトを破るため<FirstName>
と<LastName>
間を立ち往生されますので、あなたのXML内のデータの順序を壊すとGender
と呼ばれるプロパティを、導入していた - がない「古い」クライアント意志あなたの新しいサービスを呼び出すことができます。
これの制御を取るためには、あなたのデータの契約で、あなたのデータメンバーに特定のOrder=
属性を置くことができますが:
[DataContract]
public class SomeAddress
{
[DataMember(Order=0)]
public string FirstName;
[DataMember(Order=1)]
public string LastName;
}
その後、あなたは簡単に新しいプロパティを追加することができます - ちょうどの最後に追加しますリスト!
[DataContract]
public class SomeAddress
{
[DataMember(Order=0)]
public string FirstName;
[DataMember(Order=1)]
public string LastName;
[DataMember(Order=2)]
public string Gender;
}
だからあなたのデータ契約にOrder=
属性を使用することにより、あなたはあなたのXMLレイアウトの制御を取ることができ、かつ既存のデータコントラクト非破壊アップデートの簡単な拡張を行うことができます。
詳細と詳細なノウハウについては、MSDN MagazineのWebサイトのSerialization in Windows Communication Foundationをお読みください。強くお勧めします。
私はこれを試しますが、私が得ている "アセンブリをロードできませんでした"という予想されるエラーですか? – HitLikeAHammer
それはそうしました。私は既存のメンバーの順序を変更せず、新しいメンバーにOrder = 2を追加しました。次のバージョンでは、すべての新規メンバーに対してOrder = 3となります。 – HitLikeAHammer