2015-11-14 77 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。 –

相關問題