Гость
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Помогите с сериализацией / 7 сообщений из 7, страница 1 из 1
26.09.2017, 16:07
    #39526582
Сатир
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с сериализацией
Прошу прощения. Возможно вопрос выеденного яйца не стоит, но столкнулся с проблемой. Сильно не пинайте. Что либо пишу не часто и как правило для себя.

Итак. Есть web сервис. Принимает пять параметров, а отдает коллекцию класса Discount (Name, Value).

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
<System.Web.Script.Services.ScriptService()> _
<System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ToolboxItem(False)> _
Public Class Service1
    Inherits System.Web.Services.WebService
    Public da As SqlDataAdapter
    Public SQLConn As SqlClient.SqlConnection
    Public param As SqlParameter
    Public comn As SqlCommand
    Public ds As DataSet
    Public z As Discount
    Public err As Discount
    Public connectionstring As String
    Public xlAPP As Object
    Public Property TableName As String
    Private Property SqlDataAdapter1 As SqlDataAdapter
    Private Property SqlDataAdapter2 As SqlDataAdapter

    Public Class Discount
        Public Name As String
        Public Value As Decimal
        Public Sub New(Name As String, Value As Decimal)
            Me.Name = Name
            Me.Value = Value
        End Sub
    End Class

    <WebMethod()> _
    Public Function GetDiscount(ByVal Param1 As Int32, ByVal Param2 As Int32, ByVal Param3 As Int32, ByVal Param4 As Int32, ByVal Param5 As Int32) As List(Of Discount)

bla-bla-bla...


        Dim itog As New List(Of Discount)

        For w = 0 To s - 1
            If VSArray(w, 0) <> "" Then
                Dim z As Discount = New Discount(VSArray(w, 0), VSArray(w, 1))
                itog.Add(z)
            End If
        Next


        Return (itog)


    End Function

End Class



Возникает исключение по сериализации.

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
Невозможно сериализовать WebService4.Service1.Discount, т. к. он не имеет беспараметрического конструктора. 
 Описание: Необработанное исключение при выполнении текущего веб-запроса. Изучите трассировку стека для получения дополнительных сведений о данной ошибке и о вызвавшем ее фрагменте кода. 

Сведения об исключении: System.InvalidOperationException: Невозможно сериализовать WebService4.Service1.Discount, т. к. он не имеет беспараметрического конструктора.

Ошибка источника: 


Необработанное исключение при выполнении текущего веб-запроса. Информацию о происхождении и месте возникновения исключения можно получить, используя следующую трассировку стека исключений.  



Почитал эти ваши интернеты, в случаях с c# предлагают определять класс без параметров

public Discount
{
}

и типа все работает. Но что-то я не могу разобраться как его в моем случае определить.
...
Рейтинг: 0 / 0
26.09.2017, 16:58
    #39526624
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с сериализацией
ну ты отличаешь метод от конструктора ?
Код: c#
1.
2.
Public Sub New()
End Sub
...
Рейтинг: 0 / 0
26.09.2017, 17:17
    #39526637
Сатир
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с сериализацией
handmadeFromRuну ты отличаешь метод от конструктора ?
Код: c#
1.
2.
Public Sub New()
End Sub




Не понял вопрос. Ну в данном случае прописан у меня для этого класса конструктор. И что?

Не могли бы вы развернуть ответ?
...
Рейтинг: 0 / 0
26.09.2017, 17:43
    #39526651
Сатир
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с сериализацией
handmadeFromRuну ты отличаешь метод от конструктора ?
Код: c#
1.
2.
Public Sub New()
End Sub



Ок. Если вы намекаете на то, что нужно использовать конструктор по умолчанию, то тогда так:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
    Public Class Discount
        Public Discount(Name, Value)
        Public Name As String
        Public Value As Decimal
        'Public Sub New(Name As String, Value As Decimal)
        '   Me.Name = Name
        '  Me.Value = Value
        'End Sub
    End Class



Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
        Dim itog As New List(Of Discount)

        For w = 0 To s - 1
            If VSArray(w, 0) <> "" Then
                Dim z As Discount = New Discount()
                z.Name = VSArray(w, 0)
                z.Value = VSArray(w, 1)
                itog.Add(z)

            End If
        Next


        Return (itog)


    End Function

End Class



То тут уже ругается на:

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
Невозможно сериализовать объект типа System.Object[,]. Многомерные массивы не поддерживаются. 
 Описание: Необработанное исключение при выполнении текущего веб-запроса. Изучите трассировку стека для получения дополнительных сведений о данной ошибке и о вызвавшем ее фрагменте кода. 

Сведения об исключении: System.NotSupportedException: Невозможно сериализовать объект типа System.Object[,]. Многомерные массивы не поддерживаются.

Ошибка источника: 


Необработанное исключение при выполнении текущего веб-запроса. Информацию о происхождении и месте возникновения исключения можно получить, используя следующую трассировку стека исключений.  
...
Рейтинг: 0 / 0
26.09.2017, 18:18
    #39526674
Сатир
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с сериализацией
Херня какая-то.

Отдаю коллекцию экземпляров одного класса даже без наследников. Откуда он многомерный массив взял то?
Коллекция строк например в данном примере отдается на раз-два.
...
Рейтинг: 0 / 0
26.09.2017, 18:33
    #39526687
Сатир
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с сериализацией
С одним параметром сериализуется на ура.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
    Public Class Discount
        Public Discount(Name) ', Value)
        Public Name As String
        ' Public Value As Decimal
        Public Sub New()

        End Sub
        Public Sub New(Name As String) ',Value As Decimal)
            Me.Name = Name
            '  Me.Value = Value


        End Sub
    End Class



Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
 Dim itog As New List(Of Discount)

        For w = 0 To s - 1
            If VSArray(w, 0) <> "" Then
               
                Dim p1 As String = VSArray(w, 0)
                Dim p2 As Double = System.Convert.ToDecimal(VSArray(w, 1))

                Dim z As Discount = New Discount(p1)
                itog.Add(z)

        
            End If
        Next


        Return (itog)


    End Function

End Class



Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
<?xml version="1.0" encoding="UTF-8"?>

-<ArrayOfDiscount xmlns="http://tempuri.org/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">


-<Discount>


-<Discount>

<anyType xsi:nil="true"/>

</Discount>

<Name>Discount0</Name>

</Discount>


-<Discount>


-<Discount>

<anyType xsi:nil="true"/>

</Discount>

<Name>Discount1</Name>

</Discount>


-<Discount>


-<Discount>

<anyType xsi:nil="true"/>

</Discount>

<Name>Discount2</Name>

</Discount>

</ArrayOfDiscount>



Помогайте, люди добрые.
...
Рейтинг: 0 / 0
28.09.2017, 11:46
    #39527568
beowulf-da
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с сериализацией
Сатир,

Ваш Discount включает в себя поле типа Discount. Это точно правильно?
Код: xml
1.
2.
3.
4.
5.
6.
  <Discount>
    <Discount>
      <anyType xsi:nil="true"/>
    </Discount>
    <Name>Discount0</Name>
  </Discount>
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Помогите с сериализацией / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]