C# 使用JSON.Net解析某些数据
我试图从我得到的一些JSON数据中解析某个链接,但我似乎做不到?以下是一些示例数据(来自PayPal API): 所以我试着做了以下几点:C# 使用JSON.Net解析某些数据,c#,json,linq,paypal,C#,Json,Linq,Paypal,我试图从我得到的一些JSON数据中解析某个链接,但我似乎做不到?以下是一些示例数据(来自PayPal API): 所以我试着做了以下几点: dynamic stuff = JsonConvert.DeserializeObject(createdPayment.ConvertToJson()); string paymentURL = stuff.href; MessageBox.Show(paymentURL); 我还尝试使用Newtonsoft.Json.Linq将
dynamic stuff = JsonConvert.DeserializeObject(createdPayment.ConvertToJson());
string paymentURL = stuff.href;
MessageBox.Show(paymentURL);
我还尝试使用Newtonsoft.Json.Linq
将stuff.links
填充到JAraay
中,然后通过索引拉取链接,但运气不好。我使用的这个方法没有给我一个错误,它只是为我返回一个空白字符串
有什么想法吗?问题是您的“href”链接在“links”属性中,您可以这样访问它们:
dynamic stuff = JsonConvert.DeserializeObject(json);
foreach (var item in stuff.links)
{
MessageBox.Show(item.href);
}
public class Payer
{
public string payment_method { get; set; }
}
public class Amount
{
public string total { get; set; }
public string currency { get; set; }
}
public class Transaction
{
public Amount amount { get; set; }
public string description { get; set; }
public List<object> related_resources { get; set; }
}
public class Link
{
public string href { get; set; }
public string rel { get; set; }
public string method { get; set; }
}
public class RootObject
{
public string id { get; set; }
public string intent { get; set; }
public string state { get; set; }
public Payer payer { get; set; }
public List<Transaction> transactions { get; set; }
public string create_time { get; set; }
public List<Link> links { get; set; }
}
编辑:添加了获取链接列表的示例
dynamic stuff = JsonConvert.DeserializeObject(json);
var links = new List<string>();
foreach (var item in stuff.links)
{
links.Add((string)item.href);
}
dynamic stuff=JsonConvert.DeserializeObject(json);
var links=新列表();
foreach(stuff.links中的var项)
{
links.Add((string)item.href);
}
您应该创建一个类,该类保存您想要从JSON字符串中获取的值
该类将如下所示:
dynamic stuff = JsonConvert.DeserializeObject(json);
foreach (var item in stuff.links)
{
MessageBox.Show(item.href);
}
public class Payer
{
public string payment_method { get; set; }
}
public class Amount
{
public string total { get; set; }
public string currency { get; set; }
}
public class Transaction
{
public Amount amount { get; set; }
public string description { get; set; }
public List<object> related_resources { get; set; }
}
public class Link
{
public string href { get; set; }
public string rel { get; set; }
public string method { get; set; }
}
public class RootObject
{
public string id { get; set; }
public string intent { get; set; }
public string state { get; set; }
public Payer payer { get; set; }
public List<Transaction> transactions { get; set; }
public string create_time { get; set; }
public List<Link> links { get; set; }
}
公共类付款人
{
公共字符串支付方法{get;set;}
}
公共类金额
{
公共字符串总计{get;set;}
公共字符串货币{get;set;}
}
公共类事务
{
公共金额金额{get;set;}
公共字符串说明{get;set;}
与公共列表相关的_资源{get;set;}
}
公共类链接
{
公共字符串href{get;set;}
公共字符串rel{get;set;}
公共字符串方法{get;set;}
}
公共类根对象
{
公共字符串id{get;set;}
公共字符串意图{get;set;}
公共字符串状态{get;set;}
公共付款人付款人{get;set;}
公共列表事务{get;set;}
公共字符串create_time{get;set;}
公共列表链接{get;set;}
}
然后您将能够执行以下操作(使用Newtonsoft):
var object=JsonConvert.DeserializeObject(jsonstring);
然后,您将能够迭代
列表链接
对象并从中获取href值。如果您需要解析数据,那么您只需尝试此示例控制台应用程序。更多信息请访问
类程序
{
类HrefResult
{
公共字符串Href{get;set;}
公共字符串Rel{get;set;}
公共字符串方法{get;set;}
}
静态void Main(字符串[]参数)
{
字符串createdPayment=@“{”id“:”PAY-3YA6562986829024GK2JH7UQ“,”intent“:”sale“,”state“:”created“,”payer“:{”payment\u method“:”paypal“,”transactions“:[{”amount“:{”总计“:”12.00“,”currency“:”USD“,”description“:”创建付款“,”相关资源“:[],”创建时间“:”2016-01-10T15:59:14Z“,”链接:[{“href”:https://api.sandbox.paypal.com/v1/payments/payment/PAY-3YA6562986829024GK2JH7UQ,“rel”:“self”,“method”:“GET”},{“href”:https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-签出和令牌=EC-5CP140577W0453458“”“rel”“:“批准”\u url“”“方法”:“重定向”},{“href”:"https://api.sandbox.paypal.com/v1/payments/payment/PAY-3YA6562986829024GK2JH7UQ/execute“,”相对“:”执行“,”方法“:”发布“}]}”;
JObject stuff=JObject.Parse(createdPayment);
IList results=stuff[“links”].Children().ToList();
IList hrefResults=新列表();
foreach(JToken result in results)
{
HrefResult HrefResult=Newtonsoft.Json.JsonConvert.DeserializeObject(result.ToString());
hrefResults.Add(hrefResult);
}
foreach(hrefResults中的var elem)Console.WriteLine(“{0}”,elem.Href);
}
}
其他信息:与“System.Windows.Forms.MessageBox.Show(string)”匹配的最佳重载方法有一些无效参数
我想你不是指item.href?我想你是指item
?在任何情况下,我都尝试了这两种方法,但出现了相同的错误:(.Hmm,然后试试这个:MessageBox.Show((string)item.href);或者这个:MessageBox.Show(item.href.ToString());我给你的例子在一个控制台应用程序中为我工作。:)行!它返回JSON字符串中的每个href,现在问题是我如何获得第二个href,或者[1]索引?我试图将其添加到列表中,但没有成功?`list hreflist=new list();hreflist.add((字符串)item.href);MessageBox.Show(hreflist[1]);`似乎[0]包含JSON字符串中列出的所有三个链接?谢谢!没问题。我添加了另一个示例,其中链接被放入列表中,它在我的机器上工作。我尝试这样做,然后创建了一个列表=新列表
class Program
{
class HrefResult
{
public string Href { get; set; }
public string Rel { get; set; }
public string Method { get; set; }
}
static void Main(string[] args)
{
String createdPayment = @"{""id"":""PAY - 3YA6562986829024GK2JH7UQ"",""intent"":""sale"",""state"":""created"",""payer"":{""payment_method"":""paypal""},""transactions"":[{""amount"":{""total"":""12.00"",""currency"":""USD""},""description"":""creating a payment"",""related_resources"":[]}],""create_time"":""2016 - 01 - 10T15: 59:14Z"",""links"":[{""href"":""https://api.sandbox.paypal.com/v1/payments/payment/PAY-3YA6562986829024GK2JH7UQ"",""rel"":""self"",""method"":""GET""},{""href"":""https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-5CP140577W0453458"",""rel"":""approval_url"",""method"":""REDIRECT""},{""href"":""https://api.sandbox.paypal.com/v1/payments/payment/PAY-3YA6562986829024GK2JH7UQ/execute"",""rel"":""execute"",""method"":""POST""}]}";
JObject stuff = JObject.Parse(createdPayment);
IList<Newtonsoft.Json.Linq.JToken> results = stuff["links"].Children().ToList();
IList<HrefResult> hrefResults = new List<HrefResult>();
foreach (JToken result in results)
{
HrefResult hrefResult = Newtonsoft.Json.JsonConvert.DeserializeObject<HrefResult>(result.ToString());
hrefResults.Add(hrefResult);
}
foreach(var elem in hrefResults) Console.WriteLine("{0}", elem.Href);
}
}