Почему я не могу отправить свой пользовательский класс через мой веб-сервис? - PullRequest
0 голосов
/ 21 июля 2009

У меня есть эти классы:

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 ]

1 голос
/ 21 июля 2009

использование

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 >();

}

вместо

1 голос
/ 21 июля 2009

Если вы отправляете подклассы в формате xml, вам потребуется [XmlInclude]:

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

Вы можете добавить несколько маркеров [XmlInclude(...)] для любых других подклассов в модели.

1 голос
/ 21 июля 2009

List<CustomField> будет сериализован и десериализирован в CustomField[], если вы используете веб-сервис, не так ли?

0 голосов
/ 21 июля 2009

Если я вас правильно понимаю, вам следует 1. подключите ваш веб-сервис к вашему приложению 2. использовать пространство имен WS, поэтому все классы будут использоваться из прокси я не думаю, что локальный класс будет правильно понят удаленной веб-службой, даже если вы используете одну и ту же сборку на обеих сторонах

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...