2014-11-11 17 views
9

Mam metodę, która akceptuje klucz i wartość. Obie zmienne mogą mieć treść dynamiczną.Serialize danych do łańcucha json z dynamicznymi nazwami właściwości

key => jest ciągiem dynamicznym, który może być wszystkim, np. "LastSentDate"
value => jest obiektem, który może być wszystkim, np. "2014-10-10"

Ponieważ kluczem jest wartość dynamiczna, taka jak "LastSentDate" lub jakikolwiek klucz jest przekazywany do metody, to chcę, aby właściwość json była wartością klucza, a nie samego klucza.

public void SetRowVariable(string key, object value) 
{ 
    var obj = new { key = value }; // key property is literally taken maybe anonym object is not a good idea? 
    string jsonString = JsonConvert.SerializeObject(obj); 

    // jsonString should have that output => "{ "LastSentDate": "2014-10-10" }" 
} 

Jak mam serializować obiekt, który otrzymuję na życzenie?

musi być również możliwe, że "klucz" nieruchomość może zawierać znaków specjalnych takich jak "!" § $% & /() = "`

Używam .NET 3.5 smutkiem.

Odpowiedz

11

można użyć JObject (w Newtonsoft.Json.Linq):

var obj = new JObject(); 
obj[key] = JToken.FromObject(value); 

string jsonString = obj.ToString(); 
+1

Po wypróbowaniu pewnych rzeczy, takich jak AddOrUpdate zachowanie JObject, muszę powiedzieć, że twoja wskazówka jest naprawdę dobra, całkowicie pasuje do tego, co próbowałem: – Pascal

+0

@Pascal: Cieszę się, że mogę pomóc! –

+0

@AndrewWhitaker: Twoje rozwiązanie to także świetne podejście do serializacji obiektu z dołączonym elementem głównym: 'obj [value.GetType(). Name] = JToken.FromObject (value);' – alexg

12

Możesz spróbować za pomocą Dictionary<string, object>:

public void SetRowVariable(string key, object value) 
{ 
    var obj = new Dictionary<string, object>(); 
    obj[key] = value; // Of course you can put whatever crap you want here as long as your keys are unique 
    string jsonString = JsonConvert.SerializeObject(obj); 
    ... 
} 
+0

Nie jestem pewien, czyj odpowiedź jest lepsza czy wolniejsza. Naprawdę potrzebuję narzutów ze słownika i rozwiązania z @Andrew Whitaker, najpierw muszę zrobić kolejne SO pytanie :-) – Pascal

+0

Darin ty rock w MVC ;-) ale ten punkt idzie do Andrew. Ale hej masz 4 upvotes: P – Pascal

Powiązane problemy