2015-11-14 81 views
0

感谢@唐 - jayamanne和@dbc的提到,需要我的JSON得到很好的形成如何使用JSON.NET创建带有嵌套数组值的JSON字符串?

这是我转述的问题:

我们在工作中的应用程序使用JSON.NET创建JSON字符串。

这里是我试图创建JSON字符串:

{ 
    "RouteID": "123321213312", 
    "DriverName": "JohnDoe", 
"Shift": "Night", 
"ItineraryCoordinates": [ 
    [ 
     9393, 
     4443 
    ], 
    [ 
     8832, 
     3322 
    ], 
    [ 
     223, 
     3432 
    ], 
    [ 
     223, 
     3432 
    ] 
] 

}

这里是故障代码,我写了创建上述JSON字符串

 writer.WriteStartObject(); 
     writer.WritePropertyName("RouteID"); 
     serializer.Serialize(writer, routeID); 

     writer.WritePropertyName("DriverName"); 
     serializer.Serialize(writer, driverName); 

     writer.WritePropertyName("Shift"); 
     serializer.Serialize(writer, shift); 

     writer.WritePropertyName("ItineraryCoordinates"); 

     ItineraryCoordinatesCollectionFactory tpCollFac = new ItineraryCoordinatesCollectionFactory(); 
     ItineraryCoordinates anItineraryCoordinates; 

     StringBuilder coordSB = new StringBuilder(); 

     IList<TimePeriod> ItineraryCoordinatesCollection = tpCollFac.createItineraryCoordinatesCollection(); 
     for (int j = 0; j < ItineraryCoordinatesCollection.Count(); j++) 
     { 
      anItineraryCoordinates = ItineraryCoordinatesCollection[j]; 

      writer.WriteStartObject(); 
      writer.WritePropertyName("nested"); 
      coordSB.Append(anItineraryCoordinates.StartTimePeriodCoordinate.X.ToString()); 
      coordSB.Append(" , "); 
      coordSB.Append(anItineraryCoordinates.StartTimePeriodCoordinate.Y.ToString()); 

      serializer.Serialize(writer, coordSB.ToString()); 
      writer.WriteEndObject(); 

      coordSB.Clear(); 

      writer.WriteStartObject(); 
      writer.WritePropertyName("nested"); 
      coordSB.Append(aTimePeriod.EndTimePeriodCoordinate.X.ToString()); 
      coordSB.Append(" , "); 
      coordSB.Append(aTimePeriod.EndTimePeriodCoordinate.Y.ToString()); 
      serializer.Serialize(writer, coordSB.ToString()); 


      coordSB.Clear(); 
      writer.WriteEndObject(); 

     } // end of for (int j = 0; j < OrderedTimePeriodsCollection.Count(); j++) 

     writer.WriteEndObject(); // closing off Json Object LogEventsTimePeriods 

我每当我更改代码中writer.WriteStartObject()的位置时,都会收到以下错误:

状态对象中的令牌StartObject会导致无效的JSON对象。路径''。

有人可以给一个粗略的代码草案,我怎么可以用JSON.NET写出下面的JSON字符串?

{ 
    "RouteID": "123321213312", 
    "DriverName": "JohnDoe", 
"Shift": "Night", 
"ItineraryCoordinates": [ 
    [ 
     9393, 
     4443 
    ], 
    [ 
     8832, 
     3322 
    ], 
    [ 
     223, 
     3432 
    ], 
    [ 
     223, 
     3432 
    ] 
] 

}

+2

您的JSON字符串无效。这就是为什么你会无法生成这样的字符串。使用以下命令来验证您的JSON字符串http://jsonlint.com/ – Don

+2

将您的JSON上传到http://jsonlint.com/,您将看到它无效。可能你想''ItineraryCoordinates''是一个*数组*而不是一个对象。 – dbc

回答

5

上评论说你的JSON是无效的,它可能应该是:

{ 

    "RouteID": "123321213312", 
    "DriverName": "JohnDoe", 
    "Shift": "Night", 
    "ItineraryCoordinates": [ 
     [ 9393, 4443 ], 
     [ 8832, 3322 ], 
     [ 223, 3432 ], 
     [ 223, 3432 ] 
    ]   
} 

这里有一个示例演示您构建样本JSON两种方法:

public class Route 
{ 
    public string RouteID { get; set; } 
    public string DriverName { get; set; } 
    public string Shift { get; set; } 

    public int[][] ItineraryCoordinates; 


    public static string GetSampleJson() { 

     var sampleRoute = new Route 
     { 
      RouteID = "123321213312", 
      DriverName = "JohnDoe", 
      Shift = "Night", 
      ItineraryCoordinates = new int[][] { 
       new int[] {9393, 4443 }, 
       new int[] { 8832, 3322 }, 
       new int[] { 223, 3432 }, 
       new int[] { 223, 3432 } 
      } 
     }; 

     return JsonConvert.SerializeObject(sampleRoute, Formatting.Indented); 
    } 

    public static string GetSampleJson2() 
    { 
     var route = new JObject(
      new JProperty("RouteID", "123321213312"), 
      new JProperty("DriverName", "JhonDoe"), 
      new JProperty("Shift", "Night"), 
      new JProperty("ItineraryCoordinates", new JArray(
        new JArray(9393, 4443), 
        new JArray(8832, 3322), 
        new JArray(223, 3432), 
        new JArray(223, 3432) 
       ) 
      )); 

     return route.ToString(); 
    } 
} 
+0

是的,我只是在您发布帖子时纠正了JSON。谢谢。 –

+2

我认为你正在采取非常复杂的方式来构建JSON。 –

相关问题