Используя NameValueCollection в веб-сервисе C# дает не XML сериализуемую ошибку

Что-то похожее на этот пример должно сработать для вас.

Sub CopyDest3()

Dim shtImp As Worksheet
Dim shtSrc As Worksheet
Dim wbs As Workbook
Dim wbd As Workbook
Dim k As Integer
Set wbd = ThisWorkbook
Set wbs = Workbooks("Source_1.xlsx") 'presuming workbook is open
Set shtImp = wbd.Sheets("Dest")
k = 1
For k = 1 To 2
Set shtSrc = wbs.Sheets(k)

'From Source to Dest
Dim rngImpTitles As Range
Set rngImpTitles = shtImp.Rows(1)
Dim rngImpNames As Range
Set rngImpNames = shtImp.Columns(1)

Dim CopyColumn As Long
Dim CopyRow As Long
Dim foundRow As Long
Dim foundCol As Long

On Error Resume Next
'for each column in row 1 of import sheet
For CopyColumn = 2 To shtSrc.Cells(1, shtSrc.Columns.count).End(xlToLeft).Column
    foundCol = rngImpTitles.Find(shtSrc.Cells(1, CopyColumn).Value2).Column
    If Err.Number <> 0 Then
        MsgBox "Not such a col title in importsheet for " & vbNewLine & _
                        shtSrc.Cells(1, CopyColumn)
        Err.Clear
        GoTo skip_title
    End If


    For CopyRow = 2 To shtSrc.Cells(shtSrc.Rows.count, 1).End(xlUp).Row
        foundRow = rngImpNames.Find(shtSrc.Cells(CopyRow, 1)).Row
        If Err.Number <> 0 Then
            MsgBox "Not such a row name in importsheet for " & vbNewLine & _
                        shtSrc.Cells(CopyRow, 1)
            Err.Clear
            GoTo skip_row
        End If

            If Len(shtSrc.Cells(CopyRow, CopyColumn)) <> 0 Then
                    shtSrc.Cells(CopyRow, CopyColumn).Copy shtImp.Cells(foundRow, foundCol)
            End If

skip_row:
    Next CopyRow
skip_title:
Next CopyColumn
Next k
End Sub
7
задан John Saunders 26 July 2009 в 16:49
поделиться

2 ответа

Как альтернатива, можно просто определить простой класс NameValue и получить массив.

public class NameValue
{
   public string Name{get;set;}
   public string Value{get;set;}
}

[WebMethod]
public string UploadFile(byte[] incomingArray
    , string FileName
    , long FileLengthInBytes
    , NameValue[] nvcMetaData)

Если на стороне клиента у Вас есть NameValueCollection, можно легко отобразиться на тип. Проверьте образец, который я отправил в этом вопросе

5
ответ дан 7 December 2019 в 10:08
поделиться

К сожалению, все структуры словаря библиотеки.NET не являются сериализуемыми. Я услышал хорошие вещи об этом коде - возможно, который поможет.

В основном то, что Вы будете делать с кодом, который я связал, создает новый тип, который имеет пользовательские методы сериализации, которые позволят Вам сериализировать словарь к XML. Если бы это - маршрут, Вы выбираете, было бы лучше скомпилировать этот тип в своем собственном блоке так, чтобы можно было совместно использовать тот блок с клиентом сервиса таким образом, это может привыкнуть в качестве параметра к сервисному методу.

2
ответ дан 7 December 2019 в 10:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: