Цель C - получить ObjectID MongoDB из API .Net в виде строки и наоборот. - PullRequest
0 голосов
/ 10 июня 2019

Мне нужно использовать .Net API, который возвращает и использовать MongoDB ObjectId в качестве результата и параметра

Например, сервер возвращает

    _id": {
            "Timestamp": 1478679428,
            "Machine": 1031587,
            "Pid": 9124,
            "Increment": 2344035,
            "CreationTime": "/Date(1478679428000)/"
        }

В форме NSDictionary для значения ObjectID ObjectId("5822db840fbda323a423c463")

У меня такой вопрос: как я могу преобразовать выше NSDictionary _id в строковое значение 5822db840fbda323a423c463 в Objective C?

И наоборот, преобразовать NSString 5822db840fbda323a423c463 в NSDictionary для отправки в качестве параметра API?

Обратите внимание: Я не могу изменить API , толькопотреблять его

Любая помощь будет оценена

1 Ответ

0 голосов
/ 17 июня 2019

Я публикую свой результат работы в качестве ответа, надеюсь, он поможет другим в будущем

Для сериализации NSDictionary от результата API до NSString

- (NSString *)NSStringFromNSDictionary:(NSDictionary *)dict
{
    long Timestamp = [[dict objectForKey:@"Timestamp"] longValue];
    long Machine = [[dict objectForKey:@"Machine"] longValue];
    long Pid = [[dict objectForKey:@"Pid"] longValue];
    long Increment = [[dict objectForKey:@"Increment"] longValue];

    NSString *oid = [NSString stringWithFormat:@"%08lx%06lx%04lx%06lx", Timestamp, Machine, Pid, Increment];

    return oid;
}

Для сериализации NSString обратно в .Net Mongo ObjectId в виде NSDictionary

- (NSDictionary *)NSStringFromNSDictionary:(NSString *)oid
{
    long Timestamp = strtol([[oid substringToIndex:8] UTF8String], NULL, 16);
    long Machine = strtol([[oid substringWithRange:NSMakeRange(8,6)] UTF8String], NULL, 16);
    long Pid = strtol([[oid substringWithRange:NSMakeRange(14,4)] UTF8String], NULL, 16);
    long Increment = strtol([[oid substringFromIndex:18] UTF8String], NULL, 16);


    NSDictionary * dict = @{@"Timestamp": [NSNumber numberWithLong:Timestamp]
                        ,@"Machine": [NSNumber numberWithLong:Machine]
                        ,@"Pid": [NSNumber numberWithLong:Pid]
                        ,@"Increment": [NSNumber numberWithLong:Increment]
                        ,@"CreationTime": [NSString stringWithFormat:@"/Date(%ld)/",Timestamp*1000]
                        };

    return dict;
}
...