2015-09-01 3 views
0

Я пытаюсь создать или searealize JSON в этом форматеСоздание JSON с динамическим, используя newtonsoft Json.NET

{ 

    "title": "Star Wars", 
    "link": "http://www.starwars.com", 
    "description": "Star Wars blog.", 
    "item": [ 
     { 
     "title": "Episode VII", 
     "description": "Episode VII production", 
     "link": "episode-vii-production.aspx" 
     }, 
     { 
     "title": "Episode VITI", 
     "description": "Episode VII production", 
     "link": "episode-vii-production.aspx" 
     } 


     ] 
     } 

я пытаюсь это достичь этой

dynamic o = new ExpandoObject(); 

o.title= "fdsfs"; 
o.link= "fsrg"; 
o.description="fdsfs"; 
     foreach (var adata in all) 
       { 
       o.item.title="fgfd"; 
       o.item.description="sample desc"; 
       o.item.link="http://google.com" 
       } 
string json = JsonConvert.SerializeObject(o); 

но чем здесь это бросает исключение на foreach loop на элементе, который он говорит, что он не содержит defination для того же и т. д.. То, что я делаю неправильно, и как достичь того же

ответ

1

Вы должны создать o.item для присвоения значений в нем:

dynamic o = new ExpandoObject(); 
var all = new object[] { new object() }; 

o.title= "fdsfs"; 
o.link= "fsrg"; 
o.description="fdsfs"; 
var items = new List<ExpandoObject>(); 
foreach (var adata in all) 
{ 
    dynamic item = new ExpandoObject(); 
    item.title="fgfd"; 
    item.description="sample desc"; 
    item.link="http://google.com"; 
    items.Add(item); 
} 
o.item = items; 
string json = JsonConvert.SerializeObject(o); 
+1

не должен 'o.item' быть списком? – Eser

+0

О, вы правы, я обновил ответ. – drax

2

Это конструкция, которую вы должны будете получить, чтобы получить json you sta Тед. Проблема с вашим кодом заключается в том, что элемент должен быть фактически списком элементов.

public class Item 
{ 
    public string title { get; set; } 
    public string description { get; set; } 
    public string link { get; set; } 
} 

public class RootObject 
{ 
    public string title { get; set; } 
    public string link { get; set; } 
    public string description { get; set; } 
    public List<Item> item { get; set; } 
} 

Затем ча использовать этот код:

dynamic o = new ExpandoObject(); 

o.title= "fdsfs"; 
o.link= "fsrg"; 
o.description="fdsfs"; 
o.item = new List<ExpandoObject>(); 
//although list of dynamics is not recommended as far as I remember 
     foreach (var adata in all) 
       { 
       o.item.Add(new Item(){ 
       title="fgfd", 
       description="sample desc", 
       link="http://google.com" }); 
       } 
string json = JsonConvert.SerializeObject(o); 
+0

я хочу достичь динамически не используя класс, так это возможное ? – SD7

+0

до тех пор, пока вы создаете список элементов (даже если динамически), вы можете пойти –

+0

@FelixAv Вы добавляете элементы в 'o.item', не создавая список. – Eser

Смежные вопросы