111,105
社区成员




using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;
using System.IO;
using System.Runtime.Serialization;
namespace KnownTypeAttributeExample
{
class Program
{
static void Main(string[] args)
{
try
{
TestClass tc = new TestClass() { ID = "123", Name = "abc" };
Dictionary<string, TestClass> dict = new Dictionary<string, TestClass>();
dict.Add("test", tc);
List<Type> knownTypes = new List<Type>();
knownTypes.Add(typeof(TestClass));
Serialize<Dictionary<string, TestClass>>("D:\\KnownTypeAttributeExample.xml", knownTypes, dict);
Dictionary<string, TestClass> dict2 = Deserialize<Dictionary<string, TestClass>>("D:\\KnownTypeAttributeExample.xml", knownTypes);
TestClass tc2 = dict2["test"];
Console.WriteLine("ID:{0} Name:{1}", tc2.ID, tc2.Name);
}
catch (SerializationException exc)
{
Console.WriteLine("{0}: {1}", exc.Message,
exc.StackTrace);
}
finally
{
Console.WriteLine("Press Enter to exit...");
Console.ReadLine();
}
}
public static void Serialize<T>(string path, List<Type> knownTypes, T t)
{
DataContractSerializer ser =
new DataContractSerializer(typeof(T), knownTypes);
FileStream fs = new FileStream(path, FileMode.Create);
using (fs)
{
ser.WriteObject(fs, t);
}
}
public static T Deserialize<T>(string path, List<Type> knownTypes)
{
DataContractSerializer ser =
new DataContractSerializer(typeof(T), knownTypes);
FileStream fs = new FileStream(path, FileMode.Open);
T obj = default(T);
using (fs)
{
obj = (T)ser.ReadObject(fs);
}
return obj;
}
[DataContract]
public class TestClass
{
[DataMember]
public string Name { get; set; }
[DataMember]
public string ID { get; set; }
}
}
}
namespace DataContractSerializerExample
{
using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.Xml;
// You must apply a DataContractAttribute or SerializableAttribute
// to a class to have it serialized by the DataContractSerializer.
[DataContract(Name = "Customer", Namespace = "http://www.contoso.com")]
class Person : IExtensibleDataObject
{
[DataMember()]
public string FirstName;
[DataMember]
public string LastName;
[DataMember()]
public int ID;
public Person(string newfName, string newLName, int newID)
{
FirstName = newfName;
LastName = newLName;
ID = newID;
}
private ExtensionDataObject extensionData_Value;
public ExtensionDataObject ExtensionData
{
get
{
return extensionData_Value;
}
set
{
extensionData_Value = value;
}
}
}
public sealed class Test
{
private Test() { }
public static void Main()
{
try
{
WriteObject("DataContractSerializerExample.xml");
ReadObject("DataContractSerializerExample.xml");
}
catch (SerializationException serExc)
{
Console.WriteLine("Serialization Failed");
Console.WriteLine(serExc.Message);
}
catch (Exception exc)
{
Console.WriteLine(
"The serialization operation failed: {0} StackTrace: {1}",
exc.Message, exc.StackTrace);
}
finally
{
Console.WriteLine("Press <Enter> to exit....");
Console.ReadLine();
}
}
public static void WriteObject(string fileName)
{
Console.WriteLine(
"Creating a Person object and serializing it.");
Person p1 = new Person("Zighetti", "Barbara", 101);
FileStream writer = new FileStream(fileName, FileMode.Create);
DataContractSerializer ser =
new DataContractSerializer(typeof(Person));
ser.WriteObject(writer, p1);
writer.Close();
}
public static void ReadObject(string fileName)
{
Console.WriteLine("Deserializing an instance of the object.");
FileStream fs = new FileStream(fileName,
FileMode.Open);
XmlDictionaryReader reader =
XmlDictionaryReader.CreateTextReader(fs, new XmlDictionaryReaderQuotas());
DataContractSerializer ser = new DataContractSerializer(typeof(Person));
// Deserialize the data and read it from the instance.
Person deserializedPerson =
(Person)ser.ReadObject(reader, true);
reader.Close();
fs.Close();
Console.WriteLine(String.Format("{0} {1}, ID: {2}",
deserializedPerson.FirstName, deserializedPerson.LastName,
deserializedPerson.ID));
}
}