无法将 ServerEventMessage 从 ServiceStack 解析为 C#

Not Able to Parse ServerEventMessage from ServiceStack to C#

我能拿到第一级 JSON 但不是第二级。

我从这里得到 JSON -

var client = new ServerEventsClient(baseUri) {
    OnMessage = e => analysedata(e),
}.Start();

在这个函数中,我试图解析 -

public string analysedata(ServerEventMessage test)
        {
            var parsed = (JObject)JsonConvert.DeserializeObject(JsonConvert.SerializeObject(test));
            string p1 = parsed["Data"].Value<string>();
        }

现在p1应该是一个字符串吧?但它是类型 - Newtonsoft.Json.Linq.JValue

parsed["Data"] 是我的服务器发送的 JSON 响应。 如果我这样做 parsed["Data"]["event_id"] Debug.Writeline 不会在输出中打印任何内容。

文档 - https://docs.servicestack.net/csharp-server-events-client#assigning-callback-handlers

关于JObject的用法,您可以查看下面的代码。我使用了 JSON 字符串作为参考。

 string json = @"{
  'channel': {
 'title': 'James Newton-King',
'link': 'http://james.newtonking.com',
'description': 'James Newton-King\'s blog.',
'item': [
  {
    'title': 'Json.NET 1.3 + New license + Now on CodePlex',
    'description': 'Announcing the release of Json.NET 1.3, the MIT license and the source on CodePlex',
    'link': 'http://james.newtonking.com/projects/json-net.aspx',
    'categories': [
      'Json.NET',
      'CodePlex'
    ]
  },
  {
    'title': 'LINQ to JSON beta',
    'description': 'Announcing LINQ to JSON',
    'link': 'http://james.newtonking.com/projects/json-net.aspx',
    'categories': [
      'Json.NET',
      'LINQ'
    ]
  }
]
}
}";

        JObject rss = JObject.Parse(json);

        string rssTitle = (string)rss["channel"]["title"];
        // James Newton-King

        string itemTitle = (string)rss["channel"]["item"][0]["title"];
        // Json.NET 1.3 + New license + Now on CodePlex

        JArray categories = (JArray)rss["channel"]["item"][0]["categories"];
        // ["Json.NET", "CodePlex"]

        IList<string> categoriesText = categories.Select(c => (string)c).ToList();
        // Json.NET
        // CodePlex

使用JObject.Parse解析json

public string analysedata(ServerEventMessage test)
    {
        var parsed = JObject.Parse(test.Json));
        string p1 = parsed["Data"].Value<string>();
    }

由于您已经在使用 ServiceStack, using its JS Utils 是解析任意 json 的推荐方法,例如:

var obj = (Dictionary<string,object>) JSON.parse(json);