0

我没有成功将 NSArray 发送到 Web 服务。
不调用服务方法。但其他服务方法调用有效。
Web服务方法是:

[WebMethod]
        public int Method(IList items){...

我的数组充满了对象项目:

@interface Item : NSObject
{
    double prop1;
    double prop2;
    double prop3;
}
@property double prop1;
@property double prop2;
@property double prop3;

从目标 c 我尝试发送这样的数据:

NSString *soapMsg =
    [NSString stringWithFormat:
     @"<?xml version=\"1.0\" encoding=\"utf-8\"?>"
     "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
     "<soap:Body>"
     "<Method xmlns=\"http://www.mysite.com/\">"
     "<items>"
     "%@"
     "</items>"
     "</Method>"
     "</soap:Body>"
     "</soap:Envelope>", myArray
     ];

    NSURL *url = [NSURL URLWithString: @"http://...."];

    NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];
    NSString *msgLength = [NSString stringWithFormat:@"%d", [soapMsg length]];

    [req addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
    [req addValue:@"http://www.mysite.com/Method" forHTTPHeaderField:@"SOAPAction"];
    [req addValue:msgLength forHTTPHeaderField:@"Content-Length"];
    [req setHTTPMethod:@"POST"];
    [req setHTTPBody: [soapMsg dataUsingEncoding:NSUTF8StringEncoding]];

    conn = [[NSURLConnection alloc] initWithRequest:req delegate:self];

    if (conn)
    {
        webData = [NSMutableData data];
    }



更新

当我像这样制作数组时:

NSArray  * myArrDate = [NSArray arrayWithObjects:@"foo",@"bar",@"baz",nil];

和做:

NSData *jsonData = [NSJSONSerialization dataWithJSONObject:myArrDate
                                                       options:0
                                                         error:nil];

有用。但是我有一个包含User具有属性的对象的数组:UserId, FirstName, LastName, Email, Username, DisplayName, Country, City等。当我尝试上面的代码时,该行的用户应用程序崩溃。

4

4 回答 4

6

您可以发送NSArraywebservice

NSData *jsonData2 = [NSJSONSerialization dataWithJSONObject:yourArray options:NSJSONWritingPrettyPrinted error:nil];
         NSString *jsonString = [[NSString alloc] initWithData:jsonData2 encoding:NSUTF8StringEncoding];
         NSLog(@"FemaleFriendList:\n%@", jsonString);
于 2013-09-20T10:02:35.823 回答
1

您不能将 NSArray 发送到 Web 服务,但如果您想这样做,请先将该 NSArray 转换为 NSString,如下所示

NSString *stringDelete = [YourNSArray componentsJoinedByString:@","];

然后将该 NSString 传递给 webservice。让我知道它是否工作!!!!!!快乐编码...!!!

于 2012-11-01T11:59:00.830 回答
1

一种选择是NSJSONSerialization将数组转换为字符串,反之亦然,这可从 iOS 5 获得

NSArray *myArrDate = any Data ....
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:myArrDate
                                                   options:0
                                                     error:nil];
if (!jsonData) {
   NSLog(@"error");
 } else {
  NSString *JSONString = [[NSString alloc] initWithBytes:[jsonData bytes] length:[jsonData length] encoding:NSUTF8StringEncoding];
  NSLog(@"%@",JSONString);
}

有关更多信息,请参阅convert-nsdictionary-or-nsarray-to-json-nsstring-and-vice-versa链接。

于 2013-09-21T04:27:15.530 回答
0

您正在发送一个 NSString (%@ , myArray) 作为参数,并且 web 服务需要一个 IList 对象。为什么在发送之前不序列化 NSArray?例如,您可以使用 JSON。

于 2012-11-01T11:37:44.620 回答