
我已尝试使用已注释掉的代码但它提供了异常,请参阅下面的异常详细信息.
谢谢!
玩笑
[Test] public voID TranslateFromGitHubToCommitMessage() { const string Json =@"{'commits': [ { 'author': { 'email': 'dev@null.org','name': 'The Null Developer' },'message': 'okay i give in' },{ 'author': { 'email': 'author@github.com','name': 'Doc U. Mentation' },'message': 'Updating the docs,that\'s my job' },'message': 'Oops,typos' }]}"; dynamic root = JObject.Parse(Json); //dynamic root = ServiceStack.Text.JsonSerializer.DeserializefromString<JsonObject>(Json); //dynamic root = ServiceStack.Text.JsonObject.Parse(Json); var summarIEs = new List<string>(); foreach (var commit in root.commits) { var author = commit.author; var message = commit.message; summarIEs.Add(string.Format("{0} <{1}>: {2}",author.name,author.email,message)); } const string expected1 = "The Null Developer <dev@null.org>: okay i give in"; const string expected2 = "Doc U. Mentation <author@github.com>: Updating the docs,that's my job"; const string expected3 = "Doc U. Mentation <author@github.com>: Oops,typos"; Assert.AreEqual(3,summarIEs.Count); Assert.AreEqual(expected1,summarIEs[0]); Assert.AreEqual(expected2,summarIEs[1]); Assert.AreEqual(expected3,summarIEs[2]); } 例外细节
使用第一个注释掉的行时:
dynamic root = ServiceStack.Text.JsonSerializer.DeserializefromString<JsonObject>(Json);
调用该方法时会发生此异常.
的NullReferenceException:
at ServiceStack.Text.Common.DeserializeListWithElements`2.ParseGenericList(String value,Type createListType,ParseStringDelegate parseFn)at ServiceStack.Text.Common.DeserializeEnumerable`2.<>c__displayClass3.<GetParseFn>b__0(String value)at ServiceStack.Text.Common.DeserializeSpecializedCollections`2.<>c__displayClass7. <GetGenericEnumerableParseFn>b__6(String x)at ServiceStack.Text.Json.JsonReader`1.Parse(String value)at ServiceStack.Text.JsonSerializer.DeserializefromString[T](String value)at GitHubCommitAttemptTranslator.Tests.GitHubCommitAttemptTranslatorTests.TranslateFromGitHubToCommitMessage()
而且,第二个:
dynamic root = ServiceStack.Text.JsonObject.Parse(Json);var summarIEs = new List<string>();foreach (var commit in root.commits) // <-- Happens here
‘ServiceStack.Text.JsonObject’不包含’commits’的定义
注意:如果我使用第一行中的代码,则“string”消息不包含“提交”的定义,但是将类型更改为或更改为
at CallSite.Target(Closure,CallSite,Object )at System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site,T0 arg0)at GitHubCommitAttemptTranslator.Tests.GitHubCommitAttemptTranslatorTests.TranslateFromGitHubToCommitMessage()
从.NET 4.0 ServiceStack使用DynamicJson之后
参考mythz的评论:
This test case工作,但如果我修改如下:
var dog = new { name = "Spot",Parts = new { Part1 = "black",Part2 = "gray" },Arr = new [] { "one","two","three"} };var Json = DynamicJson.Serialize(dog);var deserialized = DynamicJson.Deserialize(Json); 然后,deserialized.name和Parts很好,但Arr是string类型.
也:
如果我使用’引号,它似乎不起作用.这是正常的吗? Json2工作(Arr仍然是一个字符串的程度),但Json3根本不起作用.它只是回来了
Immediate Window:deserialized = DynamicJson.Deserialize(Json3);{}base {System.Dynamic.DynamicObject}: {}_hash: Count = 1----- code: ----- var Json2 = @" { ""name"": ""Spot"",""Parts"": { ""Part1"": ""black"",""Part2"": ""gray"" },""Arr"": [ ""one"",""two"",""three"" ] }"; var Json3 = @" { 'name': 'Spot','Parts': { 'Part1': 'black','Part2': 'gray' },'Arr': [ 'one','two','three' ] }"; var deserialized = DynamicJson.Deserialize(Json1);解决方法 ServiceStack的JsON Serializer也支持动态解析,请参阅如何在wiki页面的 Dynamic JSON section中解析GitHub的JsON的示例. 总结 以上是内存溢出为你收集整理的对于’动态’实例的嵌套树,ServiceStack.Text.JsonObject.Parse与NewtonSoft.Json.Linq.JObject.Parse有什么关系?全部内容,希望文章能够帮你解决对于’动态’实例的嵌套树,ServiceStack.Text.JsonObject.Parse与NewtonSoft.Json.Linq.JObject.Parse有什么关系?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)