Asp.net 无法分析Json子对象
我正在使用Asp.net 无法分析Json子对象,asp.net,asp.net-mvc,json,asp.net-mvc-5,json.net,Asp.net,Asp.net Mvc,Json,Asp.net Mvc 5,Json.net,我正在使用JObject解析下面的Json对象 string Jstring = @"{ "PolicyId" :"xxxxxx", "PolicyHolder" :{"title":"Mr", "FirstName":"test", "LastName":"testLast"} }"; 我可以通过下面的代码获得PolicyId值 Jobject jobj = Jobject.parse(Jstring); string PolicyId = jobj.value<string&
JObject
解析下面的Json
对象
string Jstring = @"{
"PolicyId" :"xxxxxx",
"PolicyHolder" :{"title":"Mr", "FirstName":"test", "LastName":"testLast"}
}";
我可以通过下面的代码获得PolicyId
值
Jobject jobj = Jobject.parse(Jstring);
string PolicyId = jobj.value<string>("PolicyId");
我已经调试了以下代码:
jobj.Properties()
我可以在列表中找到投保人
。我也试过下面的代码,值总是null
JProperty jproperty = jobj.Properties().SingleOrDefault(x => x.Name == "PolicyHolder");
有人知道会发生什么吗?string Holder=jobj.value(“保单持有人”);
string Holder = jobj.value<string>("PolicyHolder");
由于投保人
不是字符串
,因此上述行失败。您正试图将其强制转换为字符串
。它是一个对象
。您必须使用保单持有人的属性创建一个类
,并将其用作类型,而不是字符串
以下是工作dotNetFiddle:
控制台输出:
下面是我最终声明和使用的类
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; }
}
如前所述,投保人
是一个对象
而不是字符串
下面是完整的代码列表(因此答案是自包含的)
谢谢!我发现我必须把它分配给JToken对象,不用担心。干得好
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; }
}
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; }
}