对于’动态’实例的嵌套树,ServiceStack.Text.JsonObject.Parse与NewtonSoft.Json.Linq.JObject.Parse有什么关系?

对于’动态’实例的嵌套树,ServiceStack.Text.JsonObject.Parse与NewtonSoft.Json.Linq.JObject.Parse有什么关系?,第1张

概述我想尝试ServiceStack的json解析,但我已经想出了如何通过Newtonsoft做我需要的东西.可以通过ServiceStack完成同样的事情吗? 我已尝试使用已注释掉的代码但它提供了异常,请参阅下面的异常详细信息. 谢谢! 玩笑 [Test] public void TranslateFromGitHubToCommitMessage() { const 我想尝试ServiceStack的Json解析,但我已经想出了如何通过Newtonsoft做我需要的东西.可以通过ServiceStack完成同样的事情吗?

我已尝试使用已注释掉的代码但它提供了异常,请参阅下面的异常详细信息.

谢谢!

玩笑

[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有什么关系?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1060117.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-25
下一篇2022-05-25

发表评论

登录后才能评论

评论列表(0条)

    保存