我正在使用JObject
来解析<{p}下面的Json
个对象
string Jstring = @"{
"PolicyId" :"xxxxxx",
"PolicyHolder" :{"title":"Mr", "FirstName":"test", "LastName":"testLast"}
}";
我可以通过以下代码获取PolicyId
值
Jobject jobj = Jobject.parse(Jstring);
string PolicyId = jobj.value<string>("PolicyId");
但是,我总是使用以下代码获取null
:
string Holder = jobj.value<string>("PolicyHolder");
我调试了以下代码:
jobj.Properties()
我可以在列表中找到PolicyHolder
。我也尝试过以下代码,值始终为null
JProperty jproperty = jobj.Properties().SingleOrDefault(x => x.Name == "PolicyHolder");
谁知道会发生什么?
答案 0 :(得分:0)
string Holder = jobj.value<string>("PolicyHolder");
以上行失败,因为PolicyHolder
不是string
。您正试图将其投射到string
。它是object
。您必须使用PolicyHolder
的属性创建一个类,并将其用作类型而不是string
。
答案 1 :(得分:0)
控制台输出:
以下是我最终宣布和使用的课程。
public class PolicyHolder
{
public string title { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class Policy
{
public string PolicyId { get; set; }
public PolicyHolder PolicyHolder { get; set; }
}
与Sam提到的一样,PolicyHolder
是Object
而不是字符串。
这是完整的代码清单(以便答案是自包含的)。
using System;
using System.Linq;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
public class Program
{
// Solution to SO Question: https://stackoverflow.com/q/27159478/325521
// This Answer: https://stackoverflow.com/a/
// Author: Shiva Manjunath
// SO Profile: https://stackoverflow.com/users/325521/shiva
public static void Main()
{
string Jstring = @"{
""PolicyId"" :""xxxxxx"",
""PolicyHolder"" :{""title"":""Mr"", ""FirstName"":""test"", ""LastName"":""testLast""}
}";
JObject jObject = JObject.Parse(Jstring);
JProperty jProperty = jObject.Properties().SingleOrDefault(x => x.Name == "PolicyHolder");
Console.WriteLine("Printing Policy Holder Details....");
Console.WriteLine(jProperty.Value);
}
}
public class PolicyHolder
{
public string title { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class Policy
{
public string PolicyId { get; set; }
public PolicyHolder PolicyHolder { get; set; }
}