簡體   English   中英

來自JS文件的Json,在C#中解析

[英]Json from JS file, parse in C#

我有一個帶有JSON (沒有代碼)的js文件,如下所示:

Name1 = {
    p1:0,
    p2:1,
    p3:2
};

Name2 = {
    p1:"None",
    p2:"Snappy",
    p3:"gzip"
};

我想用C#解析它,但是Newtonsoft.JSON不知道如何管理"Name = " 我該怎么做? 提前致謝。

如我的評論所述,這些都不是有效的JSON字符串。

有效JSON的結構示例

{
  "Name": {
    "p1": 0,
    "p2": 1,
    "p3": 3
  }
}

{
  "Name": {
    "p1": "None",
    "p2": "Snappy",
    "p3": "gzip"
  }
}

反序列化時,這些將需要一個根對象

例如,您的類結構如下所示:

public class RootObject {
     public Name Name {get; set;}
}

public class Name {
     public string p1 {get; set;}
     public string p2 {get; set;}
     public string p3 {get; set;}
}

並且會像這樣反序列化:

var json = ...; //Load from file or whatever.
var myObj = JsonConvert.DeserializeObject<RootObject>(json);
var p1 = myObj.Name.p1;

將文件轉換為合法的JSON字符串,然后解析

string data = //get your data somehow - (ex.loading from file)
int indexStart;
data = data.Replace(";", String.Empty);
while ((indexStart = data.IndexOf("{")) > 0)
{
   //convert the set of data to be legetimate JSON string         
   int indexEnd = data.IndexOf("}");
   string temp = data.Substring(indexStart, indexEnd - indexStart + 1);
   //Deserializ string
   var obj = JsonConvert.DeserializeObject<SomeData>(temp);
   //prepare the data for the next iteration
   data = data.Substring(indexEnd + 1);
}

和適合JSON格式的類

public class SomeData
{
    public string p1 { get; set; }
    public string p2 { get; set; }
    public string p3 { get; set; }
 }

這是解析您的字符串的代碼

class name {
        public dynamic p1 { get; set; }
        public dynamic p2 { get; set; }
        public dynamic p3 { get; set; }
    }
    public static void Main(string[] args)
    {
        string code = @"Name1 = {
p1:0,
p2:1,
p3:2
};

Name2 = {
p1:""None"",
p2: ""Snappy"",
p3: ""gzip""
};";

        List<name> l = new List<name>();
        string[] partsBySamicolon = code.Split(';'); 

        foreach(string s in partsBySamicolon){
            if (!string.IsNullOrEmpty(s))
            {
                string[] partByBraces = s.Split('{');
                name n = new name();


                string[] partsbyComma = partByBraces[1].Split('}')[0].Split(',');
                foreach (string ss in partsbyComma)
                {
                    if (!string.IsNullOrEmpty(ss))
                    {
                        if (ss.Contains("p1"))
                            n.p1 = ss.Split(':')[1].Trim();

                            if (ss.Contains("p2"))
                            n.p2 = ss.Split(':')[1].Trim();

                        if (ss.Contains("p3"))
                            n.p3 = ss.Split(':')[1].Trim();
                    }
                }
                l.Add(n);
            }

        }

        Console.Read();
    }

暫無
暫無

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

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