2010-08-19 5 views

Répondre

2

Je recommande d'utiliser DataContractJsonSerializer.

Voici une fonction simple qui tourne tout objet sérialisable en JSON:

using System; 
using System.IO; 
using System.Runtime.Serialization.Json; 
using System.Text; 

public static string ToJson<T>(this T input) 
{ 
    var serializer = new DataContractJsonSerializer(typeof(T)); 
    using (var stream = new MemoryStream()) 
    { 
     serializer.WriteObject(stream, input); 
     var jsonText = Encoding.UTF8.GetString(stream.ToArray()); 
     return jsonText; 
    } 
} 

Voici un exemple où je l'ai utilisé sur un string[]:

static void Main() 
{ 
    var input = new[] { "one", "two", @"three ""with quotes""!", "↑" }; 
    Console.WriteLine(input.ToJson()); 
    Console.ReadLine(); 
} 

La sortie est, comme prévu :

["one","two","three \"with quotes\"!","↑"] 

maintenant, dans votre question que vous mentionnez DataRow, vous devez donc transformer un objet DataRow en quelque chose que vous pouvez passer ici. Je pense que la propriété ItemArray est ce que vous cherchez:

public string DataRowToJson(DataRow dr) 
{ 
    return dr.ItemArray.ToJson(); 
} 
0

Il n'y a rien qui vous empêche en utilisant ASP Contrôles .NET pour des choses autres que HTML. Je me retrouve régulièrement avec des répéteurs pour créer des tableaux Javascript.

<script type="text/javascript"> 

<asp:Repeater ID="WhateverRepeater" runat="server"> 
    <HeaderTemplate> 
var data = [ 
    </HeaderTemplate> 
    <ItemTemplate>"<%# Container.DataItem %>"</ItemTemplate> 
    <SeparatorTemplate>, 
    </SeparatorTemplate> 
    <FooterTemplate> 
]; 
    </FooterTemplate> 
</asp:Repeater> 

</script> 

Liez vos données à ce répéteur et il va vider un tableau JavaScript, comme ceci:

var data = [ 
    "string0", 
    "string1", 
    "string2", 
    "string3" 
]; 

Vous pouvez ensuite utiliser dans votre code côté client comme tout autre tableau JS.

(Faire cela sans un cadeau du compilateur, de sorte que certains des détails peut être éteint)

+0

Aïe! Essayez d'exécuter ceci sur un tableau de chaînes qui contiennent des guillemets :) – Timwi

+0

Ugh, Poster trop tard:) Beaucoup préfèrent de toute façon votre solution. Avoir un upvote, monsieur. – Pike65

Questions connexes