【问题标题】:Convert JSON object to a string which has no formatting and indentation将 JSON 对象转换为没有格式和缩进的字符串
【发布时间】:2014-04-30 16:00:08
【问题描述】:

我在可移植类库 (PCL) 项目(针对 Xamarin.Android 和 Xamarin.iOS)中使用 Json.NET (Newtonsoft.Json) 包,并希望获取 JSON 对象的字符串表示形式,但没有格式(即没有新行,没有制表符等)。我该怎么做?

目前,如果我在 JObject 实例上调用 JObject.ToString(),我会得到一个带有换行符 (\n) 的字符串,如下所示:

"{\n  \"key\": \"value\"\n}"

本质上,我想做的是解析 JSON 对象的初始字符串表示,该对象可能包含或不包含格式/缩进/等,将解析的 JSON 对象转换为 not 包含格式/缩进/等,并以字符串结尾,如下所示:

"{\"key\":\"value\"}"

这可以通过 PCL 项目中的 Json.NET (Newtonsoft.Json) 包实现吗?我可以使用另一个库来完成此操作吗?

【问题讨论】:

    标签: xamarin.ios xamarin.android xamarin json.net portable-class-library


    【解决方案1】:

    您是否尝试过接受Formatting 枚举值的JObject.ToString() 的重载?

    string json = jObject.ToString(Formatting.None);
    

    【讨论】:

    • 我只有一个 JObject.ToString() 方法可供我使用(不带参数)...
    • 嗯,您使用的是什么版本的 Json.Net?我刚刚尝试使用 Json.Net 6.0.3(最新)创建一个可移植类库,JObject.ToString() 有一个重载,Formatting 可供我使用。
    • 我昨天才将它添加到我的项目中。它是 6.0.3 版本。并且绝对没有 ToString() 类中可用的 ToString() 方法的重载。奇怪的。 ToString() 方法的摘要如下:“返回此令牌的缩进 JSON”。
    • 确实很奇怪。除非我找错了地方,否则source code 中肯定存在过载,并且似乎没有任何条件可以阻止它在 PCL 中工作。我想不出为什么你不能在你的项目中看到它的原因。哦,好吧,这可能不值得试图弄清楚。请改用JsonConvert 方法。
    • 嗯...布赖恩,看起来你是对的!它肯定在那里,我可以使用它。当我出于某种原因在我的 JObject 实例之后键入 ".ToString" 时,它只是没有显示在 Xamarin 的自动完成中??
    【解决方案2】:

    嗯,我找不到使用 JObject 的方法,但看起来使用 JsonConvert 是可能的,如下所示:

    string json = "{\n\t\"key\":\"value\"\n}"
    var parsedJSon = JsonConvert.DeserializeObject (json);
    string jsonNoFormatting = JsonConvert.SerializeObject (parsedJSon, Formatting.None);
    

    我想知道是否有更好的方法来做到这一点?...

    【讨论】:

    • 使用JsonConvertJObject.Parse()JObject.ToString(Formatting.None) 一样有效。如果您无法访问JObject 方式,请改用此方式。应该没问题。
    猜你喜欢
    • 1970-01-01
    • 2014-03-23
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    • 2022-01-06
    • 2021-09-23
    • 2012-12-25
    • 2019-08-27
    相关资源
    最近更新 更多