【问题标题】:JSON.NET will not convert back to JObjectJSON.NET 不会转换回 JObject
【发布时间】:2016-02-05 12:49:49
【问题描述】:

我有一个微服务架构,用于我正在使用 Angularjs、Web Api 和 DocumentDb 开发的解决方案。我有一个简单的控制器,它接受一个 json 文件并将其作为 JObject 通过网络返回......就像这样......

using (StreamReader streamReader = new StreamReader(HostingEnvironment.MapPath(@"~/Json/" + path + ".json"), Encoding.UTF8))
            {
                dtsContent = JObject.Load(new JsonTextReader(streamReader));
            }
            return new IsoncOkResult<JObject>(dtsContent, this) ;

IsoncOkResult 只是我对 IHttpActionResult 的实现 以上工作没有错误.... 但是当我在调用服务上执行此代码时...

var response = (HttpWebResponse)httpWebRequest.GetResponse();
var sr = new StreamReader(response.GetResponseStream());
var dtsLookup = JObject.Load(new JsonTextReader(sr));

我得到可怕的 JsonReader currentitem is not an object 错误...

我已经尝试过 JToken、JArray.... 都不行... 我需要能够像访问 c# 中返回的对象

dtsLookup["name"] 

或者其他的......

原始 JSON 是...

[ {
"name": "1|Identifiers|ShipName",
"flag": "1|Flag",
"ircs": "1|Identifiers|Ircs",
"flag_reg_number": "1|Identifiers|FlagRegNo",
"mmsi": "1|Identifiers|Mmis",
"port_of_registry": "1|Port",
"date_of_flag_registerd": "1|FirstRegDate",
"parallel_registry": "1|HistoricalData|ParallelReg",
"previous_de_registered_date": "1|HistoricalData|PrevDeRegDate",
"ffa_vid": "1|Identifiers|SecondaryId"}]

【问题讨论】:

    标签: c# json json.net


    【解决方案1】:

    您的JSON 包含一个包含单个对象的数组:

    [{"name1" : "value1", ..., "nameN" : "valueN"}]
    

    括号表示一个数组,嵌套括号表示一个对象。

    如果您不确定您的 JSON 对象是否会嵌套在数组中,并且只想获取出现在 JSON 中的第一个对象,您可以这样做:

            var dtsRoot = (JContainer)JToken.Load(new JsonTextReader(sr)); // JContainer is the base class for JArray and JObject
            var dtsLookup = dtsRoot.DescendantsAndSelf().OfType<JObject>().FirstOrDefault();
            var name = (string)dtsLookup["name"];
    

    或者,您可以使用 SelectToken 和 .. 递归下降通配符来查找出现在 JSON 文档中任意位置的给定名称的第一个属性的值:

            var dtsRoot = JToken.Load(new JsonTextReader(sr));
            var name = (string)dtsRoot.SelectToken("..name");
    

    SelectToken 支持JSONPath query syntax。

    【讨论】:

    • 谢谢!!这有助于加载!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多