C#JsonArray为字符串(不是字符串数组。仅限字符串)

时间:2015-06-25 07:31:43

标签: c# json string json.net winrt-xaml

我一直在寻找这个,但却找不到任何东西。然后是标题的Appologies,因为将内容转换为String Arrays有很多,这不是我需要的。

我需要一种方法将JsonArray的内容转换为字符串。 (类似于JToken的.ToString())。我的场景是这样的,我需要一个数组的字符串,不管其中包含的类型是什么。有一些方法可以使用ValueConverters处理弱类型的json,但我特别不想使用它们,因为我需要将字段的内容作为字符串传递给WebView中的Javascript函数。

我有以下json(注意表示需要字符串的标记):

"highlights2":[
  {
    "_id":"highlight2-2850cb68121f9d4093e67950665c45fab02cec81",
    "_rev":"9-c4345794001495104f8cbf5dd6999f3a",
    "content":{             <---- Need this as string
      "#roepman.17.0":[
        [
          233,
          249,
          "itsi-hl-gr"
        ],
        [
          298,
          317,
          "itsi-hl-bl"
        ]
      ],
      "#roepman.19.0":[
        [
          5,
          7,
          "itsi-hl-gr"
        ]
      ]
    },                  <----- Up to here
    "created":1434552587
  }, //...more like this 
],
"book":"book-930d62a2-9b7c-46a9-b092-f90469206900",
"serverTime":1435151280

理想情况下,我想将其解析为以下类型的列表:

public class HighlightInfo2
{
    public string _id { get; set; }
    public string _rev { get; set; }}
    public string content { get; set; }
    public long created { get; set; }
}

然而,这是不可能的,因为内容&#34;内容&#34;是JsonArray类型。因此,为了不必指定&#34;内容&#34;的类型,我使用它:

public class HighlightInfo2
{
    public string _id { get; set; }
    public string _rev { get; set; }}
    public Dictionary<string, List<JsonArray>> content { get; set; }
    public long created { get; set; }
}

但这意味着我仍然需要在某些时候转换List&lt; JsonArray&gt;当我传递&#34;内容&#34;的内容时,字典里面的字符串稍后在webview中使用Javascript函数。

任何将JsonArray转换为字符串的方法吗?

3 个答案:

答案 0 :(得分:3)

根据您的评论,该字符串的格式无关紧要。它只需要是有效的JSON代表原始数据。

我建议您在content HighlightInfo2类型object中建立JsonConvert.SerializeObject(highlightInfo.content)成员并简单地执行if以获取JSON字符串。然后,您可以将其传递给JavaScript函数。

如果您需要经常这样做,可以将其与marketing presentation结合使用,并将另一个成员添加到存储此转换值的类中。

答案 1 :(得分:2)

我建议在highlightInfo2类下创建另一个属性,如contentJson,并在其中放入jsonarray字符串。

public class HighlightInfo2
{
    private Dictionary<string, List<JsonArray>> _content;
    public string _id { get; set; }
    public string _rev { get; set; }

    public Dictionary<string, List<JsonArray>> content
    {
        get { return _content; }
        set
        {
            _content = value;
            foreach (var item in _content)
            {
                contentJson += string.Join("\r\n", item.Value);
            }
        }
    }
     [JsonIgnore] //note, this depends on your json serializer
    public string contentJson { set; get; }
    public long created { get; set; }
}

答案 2 :(得分:0)

使用Daniel's AnswerBehzad's Answer的组合,我想出了这个类/类型用于反序列化,它可以毫无障碍地工作。谢谢你的帮助。

public class HighlightInfo2
{
    public string _id { get; set; }
    public string _rev { get; set; }
    public long created { get; set; }

    private JToken _content { get; set; }
    public JToken content
    {
        get { return _content; }
        set
        {
            _content = value;
            contentString = JsonConvert.SerializeObject(value);
        }
    }

    [JsonIgnore]
    public string contentString { get; set; }

}