簡體   English   中英

如何將數據從iOS發送到C#Web服務

[英]How to send data from iOS to c# web service

我已經開發了ac#rest網絡服務來與我的iPad應用通信,到目前為止,我一直在使用它,沒有任何問題。 這是一件非常簡單的事情,使用幾個查詢,到目前為止,GET方法對我來說效果很好。 現在的問題是我正在嘗試將數據從我的應用程序發送到Web服務,以插入到數據庫中。

NSString *query = [NSString stringWithFormat:@"http:mywebsite.com"];
    _theURL = [[NSURL alloc]initWithString:query];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:_theURL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:15.0];
    [request setHTTPMethod:@"POST"];
    [request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [request addValue:@"application/json" forHTTPHeaderField:@"Accept"];
    NSData *requestData = [NSData dataWithBytes:[json UTF8String] length:[json length]];
    [request setHTTPBody:requestData];
    NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:YES];

這基本上是我的Objective-C代碼,在這里我嘗試建立連接,將http方法設置為發布並編碼要發送的NSData。 這個NSData只是一個很好的json字符串。

現在在我的Web服務中,我嘗試使用Byte []來獲取此NSData以解碼為字符串,並獲取json等等。 事情是我做不到。 我的Web服務方法代碼是:

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json, XmlSerializeString = false)]
public bool submitResults(Byte[] data) {
String jsonString = System.Text.Encoding.UTF8.GetString(data);
try{
  JavaScriptSerializer json = new JavaScriptSerializer();
var resultado = json.Deserialize<Pergunta[]>(jsonString);

...然后繼續。 恢復所有這些:我無法將數據發送到Web服務,因此可以將其插入數據庫中。 任何幫助將不勝感激。

順便說一句,我得到的錯誤是這個可怕的事情:

{“ Message”:“類型\\ u0027System.Collections.Generic.IDictionary`2 [[System.String,mscorlib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089],[System.Object,mscorlib,Version = 2.0 .0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]] \\ u0027不支持數組反序列化。“,” StackTrace“:”在System.Web.Script.Serialization.ObjectConverter.ConvertListToObject(IList列表,類型,JavaScriptSerializer System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeInternal(Object o,Type type,JavaScriptSerializer serializer,Boolean throwOnError,Object&convertedObject)的序列化器,布爾throwOnError,IList&convertList)\\ r \\ n在System.Web.Script .Serialization.ObjectConverter.ConvertObjectToTypeMain(Object o,Type type,JavaScriptSerializer serializer,Boolean throwOnError,Object&convertObject)\\ r \\ n在System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer序列化器,字符串輸入,類型類型,Int32 depthL System.Web.Script.Serialization.JavaScriptSerializer.Deserialize [T](字符串輸入)\\ r \\ n,System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext上下文,WebServiceMethodData methodData)“, “ ExceptionType”:“ System.InvalidOperationException”}

因此,嘗試幫助您幫助我,這是我的json:=)

[
  {
    "categoriaID" : 1,
    "cursoID" : "601",
    "perguntaID" : "1",
    "nb" : 19574,
    "respostaTipo" : "Bom"
  },
  {
    "categoriaID" : 1,
    "cursoID" : "601",
    "perguntaID" : "2",
    "nb" : 19574,
    "respostaTipo" : "Bom"
  },
  {
    "categoriaID" : 1,
    "cursoID" : "601",
    "perguntaID" : "3",
    "nb" : 19574,
    "respostaTipo" : "Bom"
  },
  {
    "categoriaID" : 1,
    "cursoID" : "601",
    "perguntaID" : "21",
    "nb" : 19574,
    "respostaTipo" : "Bom"
  },
  {
    "categoriaID" : 2,
    "cursoID" : "601",
    "perguntaID" : "4",
    "nb" : 19574,
    "respostaTipo" : "Bom"
  },
  {
    "categoriaID" : 2,
    "cursoID" : "601",
    "perguntaID" : "5",
    "nb" : 19574,
    "respostaTipo" : "Bom"
  },
  {
    "categoriaID" : 3,
    "cursoID" : "601",
    "perguntaID" : "6",
    "nb" : 19574,
    "respostaTipo" : "Bom"
  },
  {
    "categoriaID" : 3,
    "cursoID" : "601",
    "perguntaID" : "7",
    "nb" : 19574,
    "respostaTipo" : "Bom"
  },
  {
    "categoriaID" : 3,
    "cursoID" : "601",
    "perguntaID" : "8",
    "nb" : 19574,
    "respostaTipo" : "Bom"
  },
  {
    "categoriaID" : 4,
    "cursoID" : "601",
    "perguntaID" : "9",
    "nb" : 19574,
    "respostaTipo" : "Bom"
  },
  {
    "categoriaID" : 4,
    "cursoID" : "601",
    "perguntaID" : "10",
    "nb" : 19574,
    "respostaTipo" : "Bom"
  },
  {
    "categoriaID" : 4,
    "cursoID" : "601",
    "perguntaID" : "11",
    "nb" : 19574,
    "respostaTipo" : "Bom"
  },
  {
    "categoriaID" : 4,
    "cursoID" : "601",
    "perguntaID" : "12",
    "nb" : 19574,
    "respostaTipo" : "Bom"
  },
  {
    "categoriaID" : 4,
    "cursoID" : "601",
    "perguntaID" : "13",
    "nb" : 19574,
    "respostaTipo" : "Bom"
  },
  {
    "categoriaID" : 5,
    "cursoID" : "601",
    "perguntaID" : "14",
    "nb" : 19574,
    "respostaTipo" : "Bom"
  },
  {
    "categoriaID" : 5,
    "cursoID" : "601",
    "perguntaID" : "15",
    "nb" : 19574,
    "respostaTipo" : "Bom"
  },
  {
    "categoriaID" : 5,
    "cursoID" : "601",
    "perguntaID" : "16",
    "nb" : 19574,
    "respostaTipo" : "Bom"
  },
  {
    "categoriaID" : 6,
    "cursoID" : "601",
    "perguntaID" : "17",
    "nb" : 19574,
    "respostaTipo" : "Bom"
  },
  {
    "categoriaID" : 6,
    "cursoID" : "601",
    "perguntaID" : "18",
    "nb" : 19574,
    "respostaTipo" : "Bom"
  },
  {
    "categoriaID" : 6,
    "cursoID" : "601",
    "perguntaID" : "19",
    "nb" : 19574,
    "respostaTipo" : "Bom"
  },
  {
    "categoriaID" : 6,
    "cursoID" : "601",
    "perguntaID" : "20",
    "nb" : 19574,
    "respostaTipo" : "Bom"
  },
  {
    "categoriaID" : 7,
    "cursoID" : "601",
    "perguntaID" : 22,
    "respostaTexto" : "Adorei!",
    "nb" : 19574
  }
]

更新:

經過大量研究,我認為這與Xcode中的序列化有關。 它是這樣的:

_arrayPerguntas = [[NSMutableArray alloc]init];
    for (int i = 0; i < _conteudoProgramatico.count; i++) {
        InqueritosResposta *resp = [[InqueritosResposta alloc]init];
        [resp setNb:[NSNumber numberWithInt:_nb]];
        [resp setCursoID:[self indiceSessao:_nomeSessao]];
        [resp setCategoriaID:[NSNumber numberWithInt:1]];
        [resp setPerguntaID:[_idConteudoProgramatico objectAtIndex:i]];
        [resp setRespostaTipo:[self codeToString:[_respostasConteudoProgramatico objectAtIndex:i]]];
        [_arrayPerguntas addObject:resp];
    }
    for (int i = 0; i < _sessoesPraticas.count; i++) {
        InqueritosResposta *resp = [[InqueritosResposta alloc]init];
        [resp setNb:[NSNumber numberWithInt:_nb]];
        [resp setCursoID:[self indiceSessao:_nomeSessao]];
        [resp setCategoriaID:[NSNumber numberWithInt:2]];
        [resp setPerguntaID:[_idSessoesPraticas objectAtIndex:i]];
        [resp setRespostaTipo:[self codeToString:[_respostasSessoesPraticas objectAtIndex:i]]];
        [_arrayPerguntas addObject:resp];
    }
    for (int i = 0; i < _materiaisSuporte.count; i++) {
        InqueritosResposta *resp = [[InqueritosResposta alloc]init];
        [resp setNb:[NSNumber numberWithInt:_nb]];
        [resp setCursoID:[self indiceSessao:_nomeSessao]];
        [resp setCategoriaID:[NSNumber numberWithInt:3]];
        [resp setPerguntaID:[_idMateriaisSuporte objectAtIndex:i]];
        [resp setRespostaTipo:[self codeToString:[_respostasMateriaisSuporte objectAtIndex:i]]];
        [_arrayPerguntas addObject:resp];
    }
    for (int i = 0; i < _apresentacao.count; i++) {
        InqueritosResposta *resp = [[InqueritosResposta alloc]init];
        [resp setNb:[NSNumber numberWithInt:_nb]];
        [resp setCursoID:[self indiceSessao:_nomeSessao]];
        [resp setCategoriaID:[NSNumber numberWithInt:4]];
        [resp setPerguntaID:[_idApresentacao objectAtIndex:i]];
        [resp setRespostaTipo:[self codeToString:[_respostasApresentacao objectAtIndex:i]]];
        [_arrayPerguntas addObject:resp];
    }
    for (int i = 0; i < _expectativas.count; i++) {
        InqueritosResposta *resp = [[InqueritosResposta alloc]init];
        [resp setNb:[NSNumber numberWithInt:_nb]];
        [resp setCursoID:[self indiceSessao:_nomeSessao]];
        [resp setCategoriaID:[NSNumber numberWithInt:5]];
        [resp setPerguntaID:[_idExpectativas objectAtIndex:i]];
        [resp setRespostaTipo:[self codeToString:[_respostasExpectativas objectAtIndex:i]]];
        [_arrayPerguntas addObject:resp];
    }
    for (int i = 0; i < _feedBack.count; i++) {
        InqueritosResposta *resp = [[InqueritosResposta alloc]init];
        [resp setNb:[NSNumber numberWithInt:_nb]];
        [resp setCursoID:[self indiceSessao:_nomeSessao]];
        [resp setCategoriaID:[NSNumber numberWithInt:6]];
        [resp setPerguntaID:[_idFeedback objectAtIndex:i]];
        [resp setRespostaTipo:[self codeToString:[_respostasFeedback objectAtIndex:i]]];
        [_arrayPerguntas addObject:resp];
    }
    InqueritosResposta *resp = [[InqueritosResposta alloc]init];
    [resp setNb:[NSNumber numberWithInt:_nb]];
    [resp setCursoID:[self indiceSessao:_nomeSessao]];
    [resp setCategoriaID:[NSNumber numberWithInt:7]];
    [resp setPerguntaID:[NSNumber numberWithInt:22]];
    [resp setRespostaTexto:_respostaObservacoes];
    [_arrayPerguntas addObject:resp];

    NSError *writeError = nil;
    NSMutableArray *jsonRespostas = [[NSMutableArray alloc]init];
    for(InqueritosResposta *resp in _arrayPerguntas)
    {
        NSMutableDictionary *jAnswer = [[NSMutableDictionary alloc] init];
        [jAnswer setObject:resp.nb forKey:@"nb"];
        [jAnswer setObject:resp.cursoID forKey:@"cursoID"];
        [jAnswer setObject:resp.categoriaID forKey:@"categoriaID"];
        [jAnswer setObject:resp.perguntaID forKey:@"perguntaID"];
        if (resp.respostaTipo != nil) {
            [jAnswer setObject:resp.respostaTipo forKey:@"respostaTipo"];
        }
        if (resp.respostaTexto != nil) {
            [jAnswer setObject:resp.respostaTexto forKey:@"respostaTexto"];
        }
        [jsonRespostas addObject: jAnswer];
    }
    NSArray *final = [NSArray arrayWithArray:jsonRespostas];
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:final options:NSJSONWritingPrettyPrinted error:&writeError];

    [self submitData:jsonData];

基本上,我將來自不同來源的所有對象放在_arrayPerguntas中。 然后,我使用字典將它們正確地放置在另一個數組(最終數組)中。 提交數據方法是我上面在連接設置中輸入的一種方法。 提前致謝,

快樂編碼,

ruitex23

不要這樣 不要使用Microsoft復雜的Web服務方法,僅在使用Microsoft技術連接到Web服務時才真正帶來好處。 即便如此,它充其量還是搖搖欲墜的。

查看JSONResult MVC控制器方法。 這些為您提供了對應用程序行為的最獨立於平台的控制,並且不會像遇到的錯誤那樣出現任何晦澀的錯誤。 雙向都是純JSON,沒有任何猜測。

我認為反序列化失敗。 請驗證您的json對象(jsonString)。 一個非常好的在線JSON驗證器是jsonlint.com

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM