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

时间:2018-03-27 12:21:31

标签: c# json

我有一个带JSON的js文件(没有代码)类似的东西:

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

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

我希望在C#中解析它,但Newtonsoft.JSON不知道如何管理"Name = "。 我该怎么做? 提前谢谢。

3 个答案:

答案 0 :(得分:1)

正如我的评论所述,这些都不是有效的JSON字符串。

您的结构作为有效JSON

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

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

反序列化时需要根对象

E.g。你的类结构看起来像:

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;

答案 1 :(得分:0)

将您的文件转换为合法的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; }
 }

答案 2 :(得分:-2)

这是一个解析字符串的代码

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