从json文件中读取多个json对象

时间:2014-10-30 05:15:11

标签: asp.net json json.net

我有一个包含多个json对象的文件。如何在.net

中阅读

我需要以下字符串作为两个json obejcts

" {你好:'那里'} {再见:'你',谢谢:'你'}"

3 个答案:

答案 0 :(得分:1)

@Anu:首先,我不认为你指定的字符串" {你好:'那里'} {再见:'你',谢谢:&# 39,你'}"是正确的Json字符串。

应该像这样正确地反序列化  的 {"到达" {"你好":"还有"}"离开" {"再见&#34 ;:"你""感谢":"你"}} 即可。

请看下面的示例,了解正确的结构:

enter image description here

//您需要安装Json.Net并使用它,如下所示:

    using Newtonsoft.Json;

//序列化和反序列化的对象:

public class Greeting
{

    public Arrival Arrival { get; set; }
    public Departure Departure { get; set; }
}

public class Arrival
{
    public string Hello { get; set; }

}

public class Departure
{
    public string GoodBye { get; set; }
    public string Thanks { get; set; }

}

//填充获取对象C#方式

var greeting = new Greeting
                {
                    Arrival = new Arrival { Hello = "there" },
                    Departure = new Departure { GoodBye = "you", Thanks = "you" }
                };

//将C#对象序列化为Json

var jsonString = JsonConvert.SerializeObject(new
        {
                Arrival = new
                {
                    greeting.Arrival.Hello
                },
                Departure = new { greeting.Departure.GoodBye, greeting.Departure.Thanks }
            });

//哪个产生这个Json字符串: {" Arrival":{" Hello":"有"},"出发&# 34;:{"再见":"你""感谢":"你"}}

//将Json字符串转换回C#对象 - 反序列化对象

    var greeting1 = (Greeting)JsonConvert.DeserializeObject(jsonString, typeof(Greeting));

希望这有助于回答你的问题。

祝你好运!

答案 1 :(得分:1)

Dibu 是正确的 - 您的字符串不是有效的JSON对象,因此您无法自动将其反序列化回对象。

您应该编写自己的解析器(oops,不要这样做)或强制更改源输入文件以具有以下之一:

  1. 包含一个有效的JSON对象(由多个单独的对象组成),因此您可以轻松地反序列化
  2. 在各个对象之间包含一些分隔符,因此您可以手动分割源字符串并逐个反序列化对象。
  3. 最好的选择是更改源文件以包含一个有效对象,但我想这不是您对此类源文件格式的决定...

答案 2 :(得分:0)

有一种方法。反序列化时需要传递JsonConverter。

string json = @"{hello:'there'} {goodbye:'you',Thanks:'you'}";

IList<Greeting> greetings= new List<Greeting>();
JsonTextReader reader = new JsonTextReader(new StringReader(json));
// this is the important part, which makes the reader not throw exception
//when one json object is finished
reader.SupportMultipleContent = true;
while (true)
{
    if (!reader.Read())
    {
        break;
    }

    JsonSerializer serializer = new JsonSerializer();
    Greeting greeting= serializer.Deserialize<Greeting>(reader);

    greetings.Add(greeting);
}