无法将 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);
我能拿到第一级 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);