110,566
社区成员
发帖
与我相关
我的任务
分享
[DataContract(Name="Person", Namespace="")]
public class Person {
[DataMember(Name="Name", Order=1)]
public String Name { get; set; }
[DataMember(Name="Sex")]
public String Sex { get; set; }
}
class Program
{
static void Main(string[] args) {
Person p = new Person();
p.Name = "Frant";
p.Sex = "Male";
string xml =
"<?xml version=\"1.0\" encoding=\"utf-8\"?><Person xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\"><Sex>Male</Sex><Name>Smith</Name></Person>";
DataContractSerializer s = new DataContractSerializer(typeof(Person));
using (TextReader reader = new StringReader(xml)) {
using (XmlReader xReader = XmlReader.Create(reader)) {
p = s.ReadObject(xReader) as Person;
Console.WriteLine(p.Name);
Console.WriteLine(p.Sex);
}
}
Console.WriteLine("Press ENTER to exit");
Console.ReadLine();
}
}
public class NetDataContractAttribute : Attribute, IOperationBehavior
{
public void AddBindingParameters(OperationDescription description, BindingParameterCollection parameters)
{
}
public void ApplyClientBehavior(OperationDescription description, ClientOperation proxy)
{
ReplaceDataContractSerializerOperationBehavior(description);
}
public void ApplyDispatchBehavior(OperationDescription description, DispatchOperation dispatch)
{
ReplaceDataContractSerializerOperationBehavior(description);
}
public void Validate(OperationDescription description)
{
}
private static void ReplaceDataContractSerializerOperationBehavior(OperationDescription description)
{
DataContractSerializerOperationBehavior dcsOperationBehavior = description.Behaviors.Find<DataContractSerializerOperationBehavior>();
if (dcsOperationBehavior != null)
{
description.Behaviors.Remove(dcsOperationBehavior);
description.Behaviors.Add(new NetDataContractSerializerOperationBehavior(description));
}
}
public class NetDataContractSerializerOperationBehavior : DataContractSerializerOperationBehavior
{
public NetDataContractSerializerOperationBehavior(OperationDescription operationDescription)
: base(operationDescription)
{
}
public override XmlObjectSerializer CreateSerializer(Type type, string name, string ns, IList<Type> knownTypes)
{
return new NetDataContractSerializer();
}
public override XmlObjectSerializer CreateSerializer(Type type, XmlDictionaryString name, XmlDictionaryString ns, IList<Type> knownTypes)
{
return new NetDataContractSerializer();
}
}
}
[ServiceContract]
public interface IMgrPerson
{
[OperationContract]
[NetDataContract]
void AddPerson(IPerson Person);
[OperationContract]
[NetDataContract]
IList<IPerson> GetPersons();
}