为什么我不能通过我的webservice发送我的自定义类?

时间:2009-07-21 13:45:48

标签: c# web-services serialization

我有这些课程:

public abstract class CustomField
{
    public String Id { get; set; }
    public String Name { get; set; }
    public String Description { get; set; }
    public FieldType Type { get; set; } 

    public enum FieldType
    { 
        String = 0,
        Integer = 1,
        Boolean = 2,
        List = 3
    }
}

public class StringCustomField:CustomField
{
    public String Value { get; set; }
    public Int32 MinLenght { get; set; }
    public Int32 MaxLenght { get; set; }

    public StringCustomField()
    {
        this.Type = FieldType.String;
    }
}

public class CustomGroup
{
    public String Id { get; set; }
    public String Name { get; set; }
    public String Description { get; set; }
    public List<CustomField> FieldList = new List<CustomField>();
}

当我尝试通过我的网络服务转移CustomGroup时,我收到此错误:

  

远程服务器返回错误:NotFound

当C#尝试通过StringField传输CustomField时,序列化失败。

我做错了什么?

马克·格拉维尔告诉我这样做,我理解解决方案,但有些事情是错误的,没有效果,导致同样的错误! ,帮助!!

[XmlInclude(typeof(StringCustomField))]
[XmlInclude(typeof(IntegerCustomField))]
[XmlInclude(typeof(BooleanCustomField))]
[XmlInclude(typeof(ListCustomField))]
public abstract class CustomField
{
    public String Id { get; set; }
    public String Name { get; set; }
    public String Description { get; set; }
    public FieldType Type { get; set; } 

    public enum FieldType
    { 
        String = 0,
        Integer = 1,
        Boolean = 2,
        List = 3
    }
}

4 个答案:

答案 0 :(得分:1)

如果您使用的是网络服务,

List<CustomField>会序列化并反序列化为CustomField[],不是吗?

答案 1 :(得分:1)

使用

public class CustomGroup
{
    public String Id { get; set; }
    public String Name { get; set; }
    public String Description { get; set; }
    public List<CustomField> FieldList = new List< StringCustomField >();

}

代替

答案 2 :(得分:1)

如果要将子类作为xml发送,则需要[XmlInclude]

[XmlInclude(typeof(StringCustomField))]
public abstract class CustomField
{...}

您可以为模型中的任何其他子类添加多个[XmlInclude(...)]标记。

答案 3 :(得分:0)

如果我理解正确,你应该 1.将您的Web服务连接到您的应用程序 2.使用WS的命名空间,因此将从Proxy使用所有类 即使您在双方使用相同的程序集,我也不认为远程网络服务能够正确理解本地课程