NSDictionary 到 Xamarin.iOS 中的 Json

Posted

技术标签:

【中文标题】NSDictionary 到 Xamarin.iOS 中的 Json【英文标题】:NSDictionary to Json in Xamarin.iOS 【发布时间】:2019-02-15 12:24:53 【问题描述】:

我正在尝试使用NSJsonSerialization.SerializeNSDictionary 转换为Json。但我没有得到预期的输出

Xamarin.iOS 中的代码

var dictionary = new NSDictionary(
                new NSString("userName"), new NSString("450012"),
                new NSString("password"), new NSString("Abc134"),
                new NSString("companyId"), new NSString("CM1")
            );

request.Body = NSJsonSerialization.Serialize(dictionary, 0, out error); 

问题是 dictionary 变量的值正在显示

password":Abc134,companyId:CM1,userName:450012

而不是

密码:Abc134,companyId:CM1,用户名:450012

前后各加一个花括号

有没有办法为用户输入值生成正确的 json 字符串

【问题讨论】:

【参考方案1】:

您的 json 没有任何问题。如果您在控制台中打印它,您会看到打印的值是您期望的值。

"password":"Abc134","companyId":"CM1","userName":"450012"

试试看:

Console.WriteLine($"json");

如果你真的,真的想去掉那个“额外的”花括号,只需将结果转换为字符串。

var jsonString = json.ToString();

上面应该做的工作。

我只是建议您将方法更改为: var json2 = NSJsonSerialization.Serialize(dictionary, NSJsonWritingOptions.PrettyPrinted, out error);

使用PrettyPrinted 选项。

希望这会有所帮助。-

【讨论】:

我试图将json字符串传递给requset.Bodyrequest.Body确实将NSData作为参数,因此我使用NSJsonSerialization但问题是NSJsonSerialization确实访问了它的第一个参数为NSObject 那么如何将我的"password":"Abc134","companyId":"CM1","userName":"450012" 转换为NSJsonSerialization 可以接受的NSObject os【参考方案2】:

是的,您可以尝试创建一个自定义对象进行序列化。创建一个简单的普通对象来保存您想要的数据。

User user = new User() 
    UserName = "JohnDoe",
    Password = "xxx",
    CompanyId = 01
;
request.Body = NSJsonSerialization.Serialize(user, 0, out error);

然后序列化它,你会看到正确的 json 格式。

【讨论】:

这不起作用,因为您无法将 xamarin User 对象转换为 NSObject

以上是关于NSDictionary 到 Xamarin.iOS 中的 Json的主要内容,如果未能解决你的问题,请参考以下文章

如何在序列化为 json 之前将 NSDictionary 添加到另一个 NSDictionary

NSdictionary 到 JSON 数据正在排序

将对象 NSMutableArray 添加到 NSDictionary

Xamarin Firebase iOS Analytics 抛出 AOT MTOUCH ERROR MT3001 - Firebase.Analytics.dll

将整个数组添加到 nsdictionary

NSDictionary 元素到 UITextfield