另一种远程类型的XML序列化和反序列化

时间:2018-01-29 11:44:00

标签: c# xml webclient

我需要使用WebClient调用web方法(不添加引用)。 Web方法将一系列部门作为参数。

public class Departement 
{
    [XmlElement (Namespace = "http://tempuri.org/")]
    string Id;
    [XmlElement (Namespace = "http://tempuri.org/")]
    List<Student> listStident = new List<Student> ();
}
public class Student 
{
    [XmlElement (Namespace = "http://tempuri.org/")]
    string firstName;
    [XmlElement (Namespace = "http://tempuri.org/")]
    string lastName;
}

我的项目中有同一个班级。所以我的想法是序列化我的数组并在远程类的类型中反序列化,所以我可以将它作为参数传递。 但是当我反序列化时,新对象包含简单类型属性的值,但不包含复杂属性的值。

Id = 110;
listStident = null;

这是我的代码;

public Object Deserialize(xmlDocument xmlDocument, Type type)
{
    object result = new object();
    var serializer = new Xmlserializer(type);
    if(type.IsArray)
        result = Activator.CreateInstance(type, xmlDocument.FirstChild.NextSibling.ChildNodes.Count)
    else
        result = Activator.CreateInstance(type);

    using(XmlReader xmlReader = new xmlNodeReader(xmlDocument)) 
    {
        result = Convert.ChangeType(serializer.Deserialize(xmlReader), type);
    }     
    return result;           
}

Type类型是来自dyanamicly加载的程序集的WebMethod参数的类型。

Type type = myRemoteWebMethod.GetParameters()[0].ParameterType;

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。 这是代码:

public class Departement {
     [XmlElement (Namespace = "http://tempuri.org/")]
     string Id;
     [XmlArray("Students", Namespace = "http://tempuri.org/")]
     [XmlArrayItem("Student")]
     List<Student> listStident = new List<Student> ();
 }

有效。