2015-06-04 9 views
0

У меня есть 3 datatables в моем наборе данных. Таблица A имеет отношение один к большому с B и C. Я хочу создать Json, как показано ниже, используя Linq в C#. Может кто-нибудь, пожалуйста, помогите мне? Я хотел бы заранее поблагодарить всех, кто будет руководить мной или предоставить мне информацию по моему вопросу.Создать комплекс json из datatable C#

{ 
    "A": [ 
     { 
      "id": "0001", 
      "type": "donut", 
      "name": "Cake", 
      "ppu": 0.55, 
      "B": [ 
       { 
        "id": "1001", 
        "type": "Regular" 
       } 
      ], 
      "C": [ 
       { 
        "id": "5001", 
        "type": "None" 
       }, 
       { 
        "id": "5002", 
        "type": "Glazed" 
       } 
      ] 
     } 
    ], 
    "A": [ 
     { 
      "id": "0002", 
      "type": "Cupcake", 
      "name": "Cake", 
      "ppu": 2.43, 
      "B": [ 
       { 
        "id": "1001", 
        "type": "Regular" 
       } 
      ], 
      "C": [ 
       { 
        "id": "5001", 
        "type": "None" 
       }, 
       { 
        "id": "5002", 
        "type": "Glazed" 
       } 
      ] 
     } 
    ] 
} 
+0

Любая конкретная причина, по которой вы сокращаете свои «средства» в камне и позволяете своим «целям» прийти на второе место? (т. е. ваша цель - сериализованный вывод в формате JSON, а не «я должен использовать LINQ для этого»). В настоящее время существует много сериализаторов JSON, которые могут сделать для вас весь тяжелый подъем. –

ответ

1

Прежде всего, вы должны создать эти классы,

public class Result 
{ 
    public List<TableA> A { get; set; } 
} 
public class TableA 
{ 
    public TableA() 
    { 
      B = new List<TableB>(); 
      C = new List<TableC>(); 
    } 
    public string id { get; set; } 
    public string type { get; set; } 
    public string name { get; set; } 
    public float ppu { get; set; } 
    public virtual List<TableB> B { get; set; } 
    public virtual List<TableC> C { get; set; } 
} 

public class TableB 
{ 
    public string id { get; set; } 
    public string type { get; set; } 
} 
public class TableC 
{ 
    public string id { get; set; } 
    public string type { get; set; } 
} 

После затем сохраните значения в результате объект класса Result и сериализовать это с помощью NewtonSoft сериалайзер, как указано ниже:

Result result; 
JsonConvert.SerializeObject(result); 
+0

Ты избил меня в этом. :) Не забудьте сделать ваши дочерние коллекции «виртуальными», чтобы EF мог их лениво загружать. – vortex

+0

Спасибо .. Если это сработало для вас, тогда вы могли бы пометить этот ответ как принятый? –

+0

Работал спасибо. – Alkingson

0

Вы можете сделать это простым, не создавая классов и не используя «динамический» тип. C# 4 позволяет динамически создавать ваши типы и использовать их как любые объявленные типы или классы.

Более подробную информацию о динамическом типе: http://www.codeproject.com/Articles/69407/The-Dynamic-Keyword-in-C

Первое, что вам нужно, это создать динамический тип и заполнить его свойства, как Json вам требуется. Пожалуйста, посмотрите этот пост, чтобы узнать, как структура Json и динамические коррелирует: http://www.codeproject.com/Tips/834005/storing-GeoJson-coordinates.

Существует множество способов сделать вашу итерацию в DataSet динамически настроенной на основе ваших данных и столбцов. Вы можете получить дополнительную помощь: Convert datatable to JSON in C#.

Надеюсь, это поможет.

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