发送c#web服务中的对象列表

发送c#web服务中的对象列表,c#,web-services,C#,Web Services,我有以下两个目标: public class Dog { public string Name {get;set;} public int Age {get;set;} } public class Person { public string Name {get;set;} public string City {get;set;} public string ID {get;set;} } 现在,在服务器端,我构建了一个人和狗的混合列表,我想通过web服务(asm

我有以下两个目标:

public class Dog
{
  public string Name {get;set;}
  public int Age {get;set;}
} 

public class Person
{
  public string Name {get;set;}
  public string City {get;set;}
  public string ID {get;set;}
} 
现在,在服务器端,我构建了一个人和狗的混合列表,我想通过web服务(asmx)将这个列表返回给客户机

顺序很重要,最终我的列表将容纳更多类型

如何在web服务中返回混合对象列表

谢谢。

不是C#的专家,所以如果这不是最有效的,请原谅

头等舱

public class Person : MyClass
{
    public string Name { get; set; }
    public string City { get; set; }
    public string ID { get; set; }
}
二等犬

public class Dog : MyClass
{
    public string Name { get; set; }
    public int Age { get; set; }
}
继承的类ie MyClass.cs

public class MyClass
    {
        public string Type { get; set; }
    }
注意,我添加了一个字段类型来区分使用webservice的程序中的对象。您可以使用类型的枚举来改进这一点

返回数据的示例函数

public List<MyClass> returnData()
        {


            List<MyClass> returningdata = new List<MyClass>();

            Person pers = new Person();
            pers.City = "NELSPRUIT";
            pers.Name = "TED";
            pers.ID = "5502226585665";
            pers.Type = "PERSON";

            returningdata.Add(pers);

            Dog doggy = new Dog();
            doggy.Name = "Tiny";
            doggy.Age = 2;
            doggy.Type = "DOG";

            returningdata.Add(doggy);

            return returningdata;
        }
公共列表返回数据()
{
列表返回数据=新列表();
Person pers=新的Person();
pers.City=“NELSPRUIT”;
pers.Name=“TED”;
pers.ID=“5502226585665”;
pers.Type=“PERSON”;
返回数据。添加(pers);
狗狗=新狗();
doggy.Name=“Tiny”;
小狗。年龄=2岁;
doggy.Type=“DOG”;
返回数据。添加(狗);
返回数据;
}

希望这就是您想要的。

我认为您应该创建一个新类来封装您的许多类

public class Dog : MyClass
{
  public string Name {get;set;}
  public int Age {get;set;}
} 

public class Person : MyClass
{
  public string Name {get;set;}
  public string City {get;set;}
  public string ID {get;set;}
} 

public class NewClass
{
    public enum OBJType { 
       Dog,Person
    } // like a constant for specific object type
    public Dog D_Dog { get; set;  }
    public Person D_Person { get; set; }
    public OBJType Type { get; set; } 
    public int seq { get; set; }

}
那么它应该是这样使用的

        //At Server
        List<NewClass> newList = new List<NewClass>();
        NewClass Item1 = new NewClass();
        Item1.D_Dog =  new Dog() { Name = "Woof", Age = 3 };
        Item1.seq = 1;
        Item1.Type =  NewClass.OBJType.Dog;
        newList.Add(Item1);

        NewClass Item2 = new NewClass();
        Item2.D_Person = new Person() { Name = "John", City = "TPP" , ID =111 };
        Item2.seq = 2;
        Item2.Type = NewClass.OBJType.Person;
        newList.Add(Item2);


        //At Client
        List<NewClass> newList = //..get form webservice 

         foreach (var Item in newList)
        {
            if (Item.Type == NewClass.OBJType.Dog)
            {
                // using Item.D_Dog;
            }
            else {
                // using Item.D_Person

            }

        }
//在服务器上
List newList=新列表();
NewClass Item1=新的NewClass();
Item1.D_Dog=newdog(){Name=“Woof”,Age=3};
项目1.seq=1;
Item1.Type=NewClass.OBJType.Dog;
新增(第1项);
NewClass Item2=新的NewClass();
Item2.D_Person=newperson(){Name=“John”,City=“TPP”,ID=111};
项目2.seq=2;
Item2.Type=NewClass.OBJType.Person;
新增(第2项);
//在客户端
List newList=/…获取表单webservice
foreach(新列表中的变量项)
{
if(Item.Type==NewClass.OBJType.Dog)
{
//使用项目D_狗;
}
否则{
//使用Item.D_-Person
}
}

为什么不返回两个列表?一个用于Dog,第二个用于Person。然后您需要创建另一个类,该类包含list和list作为两个属性。只需将其包装在ResponseResult之类的类中并将其发送回您的技术是什么?WCF?不是。它是web服务谢谢,但现在当我在客户端时,我在dog type中看到person属性,在person type中看到dog属性。Jip,这就是我添加type属性的原因,以便客户端可以区分对象。如果不这样做,您不知道如何混合列表。否则如何区分同一列表中的对象?您可以始终在客户端检查Type属性并将其强制转换为指定的Type对象。因此,拆分MyClass属性获取Dog属性并将其放在类Dog中,然后对person执行相同的操作。。但仍然从Myclass继承。然后在客户端使用Type属性将其强制转换为正确的对象。