C# 使用JSON.Net解析某些数据

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将

我试图从我得到的一些JSON数据中解析某个链接,但我似乎做不到?以下是一些示例数据(来自PayPal API):

所以我试着做了以下几点:

    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);
    }
}