簡體   English   中英

C#JSON解析格式

[英]c# json parsing format

在c#中,我試圖解析以下格式的JSON。 我只能使用下面的示例代碼來接近,但是它非常不穩定。

(我也不確定如何用Javascript解析,這也是我需要做的。)

JSON示例:

{"72": { "Rejected": true }, "271": { "PreApproved": true}}

代碼示例:

List<SSKChanges> lstSSK = new List<SSKChanges>();
string sskSource = "";
string sskStatus = "";
bool sskStatusBool = false;
int i = 0;
int iList = 0;
JsonTextReader reader = new JsonTextReader(new StringReader(jsonExample));
while (reader.Read())
{
    if (reader.Value != null)
    {
        if (i == 0)
        {
            int n;
            bool isNumeric = int.TryParse(reader.Value.ToString(), out n);
            if (isNumeric)
            {
                sskSource = reader.Value.ToString();
                i = 1;
            }
            else
            {
                sskStatus = reader.Value.ToString();
                i = 2;
            }
        }
        else if (i == 1)
        {
            sskStatus = reader.Value.ToString();
            i = 2;
        }
        else
        {
            sskStatusBool = (bool)reader.Value;
            i = 0;
            sskSource = "";
            sskStatus = "";
            sskStatusBool = false;
        }
    }
}

假設您已經在使用 (如使用所建議的JsonTextReader ),則可以將JSON加載到JObject然后使用LINQ to JSON 查詢生成的對象。

例如,給定類:

public class SSKChanges
{
    public string SskSource { get; set; }
    public string SskStatus { get; set; }
    public bool? SskStatusBool { get; set; }
}

你可以做:

        var obj = JObject.Parse(jsonExample);
        var lstSSK = (from property in obj.Properties()
                      select new SSKChanges
                      {
                          SskSource = property.Name,
                          SskStatus = property.Value.Children<JProperty>().Select(p2 => p2.Name).FirstOrDefault(),
                          SskStatusBool = property.Value.Children<JProperty>().Select(p2 => (bool?)p2.Value).FirstOrDefault()
                      }).ToList();

至於您問題中的第二個問題, 我也不確定如何用javascript解析,我也需要這樣做 ,您應該問一個專門針對javascript專家的第二個問題。

由於您已經在使用Json.net,因此我可以這樣做:

string json = @"{""72"": { ""Rejected"": true }, ""271"": { ""PreApproved"": true}}";
var jobj = JObject.Parse(json);

foreach (var entry in jobj.Children().Cast<JProperty>())
{
    var kv = entry.Value.First() as JProperty;
    Console.WriteLine(entry.Name + "=>" + kv.Name + ":"  + kv.Value);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM