public class Item : IExtensibleDataObject
{
[DataMember]
public string Name { get ; set ; }
public ExtensionDataObject ExtensionData { get ; set ; }
}
public class ItemV2 : IExtensibleDataObject
{
[DataMember]
public int Id { get ; set ; }
[DataMember]
public string Name { get ; set ; }
public ExtensionDataObject ExtensionData { get ; set ; }
}
public class ItemNo
{
[DataMember]
public string Name { get ; set ; }
}
public class ItemV2No
{
[DataMember]
public int Id { get ; set ; }
[DataMember]
public string Name { get ; set ; }
}
![WCF <wbr>契约版本管理—IExtensibleDataObject](https://i-blog.csdnimg.cn/blog_migrate/a4c26d1e5885305701be709a3d33442f.gif)
static void SerializingItemV2( string path)
{
ItemV2 itemV2 = new ItemV2();
itemV2.Name = " Name " ;
itemV2.Id = 88 ;
DataContractSerializer ser =
new DataContractSerializer( typeof (ItemV2));
FileStream fs = new FileStream(path, FileMode.Create);
ser.WriteObject(fs, itemV2);
fs.Close();
Console.WriteLine( " Serializing ItemV2 " + Environment.NewLine + " Id:{0} " + Environment.NewLine + " Name:{1} " , itemV2.Id, itemV2.Name);
}
static void SerializingItem( string path)
{
DataContractSerializer ser =
new DataContractSerializer( typeof (Item));
FileStream fs = new FileStream(path, FileMode.Open);
XmlDictionaryReader reader =
XmlDictionaryReader.CreateTextReader(fs, new XmlDictionaryReaderQuota
Item item = ser.ReadObject(reader, false ) as Item;
fs.Close();
Console.WriteLine( " Deserialize to Item " + Environment.NewLine + " Old Name:{0} " , item.Name);
item.Name = " NewName " ;
fs = new FileStream(path, FileMode.Create);
ser.WriteObject(fs, item);
fs.Close();
Console.WriteLine( " Serializing Item " + Environment.NewLine + " New Name:{0} " , item.Name);
}
static void DeserializeItemV2( string path)
{
FileStream fs = new FileStream(path, FileMode.Open);
DataContractSerializer ser = new DataContractSerializer( typeof (ItemV2));
ItemV2 itemV2 = ser.ReadObject(fs) as ItemV2;
fs.Close();
Console.WriteLine( " Deserialize to ItemV2 " + Environment.NewLine + " Id:{0} " + Environment.NewLine + " Name:{1} " , itemV2.Id, itemV2.Name);
}
![WCF <wbr>契约版本管理—IExtensibleDataObject](https://i-blog.csdnimg.cn/blog_migrate/a4c26d1e5885305701be709a3d33442f.gif)
static void SerializingItemV2No( string path)
{
ItemV2No itemV2 = new ItemV2No();
itemV2.Name = " Name " ;
itemV2.Id = 88 ;
DataContractSerializer ser =
new DataContractSerializer( typeof (ItemV2No));
FileStream fs = new FileStream(path, FileMode.Create);
ser.WriteObject(fs, itemV2);
fs.Close();
Console.WriteLine( " Serializing ItemV2 " + Environment.NewLine + " Id:{0} " + Environment.NewLine + " Name:{1} " , itemV2.Id, itemV2.Name);
}
static void SerializingItemNo( string path)
{
DataContractSerializer ser =
new DataContractSerializer( typeof (ItemNo));
FileStream fs = new FileStream(path, FileMode.Open);
XmlDictionaryReader reader =
XmlDictionaryReader.CreateTextReader(fs, new XmlDictionaryReaderQuota
ItemNo item = ser.ReadObject(reader, false ) as ItemNo;
fs.Close();
Console.WriteLine( " Deserialize to Item " + Environment.NewLine + " Old Name:{0} " , item.Name);
item.Name = " NewName " ;
fs = new FileStream(path, FileMode.Create);
ser.WriteObject(fs, item);
fs.Close();
Console.WriteLine( " Serializing Item " + Environment.NewLine + " New Name:{0} " , item.Name);
}
static void DeserializeItemV2No( string path)
{
FileStream fs = new FileStream(path, FileMode.Open);
DataContractSerializer ser = new DataContractSerializer( typeof (ItemV2No));
ItemV2No itemV2 = (ItemV2No)ser.ReadObject(fs);
fs.Close();
Console.WriteLine( " Deserialize to ItemV2 " + Environment.NewLine + " Id:{0} " + Environment.NewLine + " Name:{1} " , itemV2.Id, itemV2.Name);
}
![WCF <wbr>契约版本管理—IExtensibleDataObject](https://i-blog.csdnimg.cn/blog_migrate/a4c26d1e5885305701be709a3d33442f.gif)
{
try
{
Console.WriteLine( " ----------Use IExtensibleDataObject Begin---------- " );
Console.WriteLine();
SerializingItemV2( " v2.xml " );
Console.WriteLine();
SerializingItem( " v2.xml " );
Console.WriteLine();
DeserializeItemV2( " v2.xml " );
Console.WriteLine( " Id value saved. " );
Console.WriteLine();
Console.WriteLine( " ----------Use IExtensibleDataObject End---------- " + Environment.NewLine);
Console.WriteLine( " ----------UnUse IExtensibleDataObject Begin---------- " );
Console.WriteLine();
SerializingItemV2No( " v2No.xml " );
Console.WriteLine();
SerializingItemNo( " v2No.xml " );
Console.WriteLine();
DeserializeItemV2No( " v2No.xml " );
Console.WriteLine( " Id value lose. " );
Console.WriteLine();
Console.WriteLine( " ----------UnUse IExtensibleDataObject Begin---------- " );
}
catch (SerializationException ex)
{
Console.WriteLine( " {0}: {1} " , ex.Message, ex.StackTrace);
}
Console.ReadLine();
}
Serializing ItemV2
Id: 88
Name:Name
Deserialize to Item
Old Name:Name
Serializing Item
New Name:NewName
Deserialize to ItemV2
Id: 88
Name:NewName
Id value saved.
---------- Use IExtensibleDataObject End ----------
---------- UnUse IExtensibleDataObject Begin ----------
Serializing ItemV2
Id: 88
Name:Name
Deserialize to Item
Old Name:Name
Serializing Item
New Name:NewName
Deserialize to ItemV2
Id: 0
Name:NewName
Id value lose.
---------- UnUse IExtensibleDataObject Begin ----------
<</SPAN>behavior name="serviceBehavior">
<</SPAN>dataContractSerializer ignoreExtensionDataObjec
</</SPAN>behavior>
</</SPAN>serviceBehaviors>
public class ExplicitService : IExplicitService
{
}
本文转自:http://www.cnblogs.com/xinhaijulan/archive/2010/10/13/1850598.html