2016-01-18 19 views
9

In C#, sto costruendo una classe (semplificato qui per scopi di discussione) che alla fine verrà serializzato in qualche JSON definito esternamente:C# - come utilizzare caratteri non validi in un nome di variabile

{ 
    "$schema": "http://example.com/person.json", 
    "name": "John", 
    "age": 86 
    } 

Nella mia codice avrei qualcosa di simile:

public class Person 
{ 
    public const string $schema= @"http://example.com/person.json"; 
    public string name {get;set; } 
    public int age {get; set;} 
} 

...

Person person = new Person(); 
person.name = "John"; 
person.age = 88; 

JavaScriptSerializer serializer = new JavaScriptSerializer(); 
string json = serializer.Serialize(person); 

Nel mio codice di sopra del $ schema è cau canta un errore "Unexpected character" $ ". C'è una soluzione?

+0

Nope. C# ha semplicemente diverse regole di denominazione delle variabili rispetto a JavaScript. Ovviamente, potresti sempre usare un dizionario che associa le stringhe agli oggetti, sebbene raccomandi di non farlo. – Cameron

+0

Possibile duplicato di [Mappa entità su JSON utilizzando JavaScriptSerializer] (http://stackoverflow.com/questions/6398171/map-entity-to-json-using-javascriptserializer) – YK1

risposta

11

Fornire l'attributo [DataContract] alla classe Person.

Inoltre, intendevi creare schemaconst?

[DataContract] 
public class Person 
{ 
    [DataMember(Name = "$schema")] 
    public string schema { get; set; } 
    public string name { get; set; } 
    public int age {get; set;} 
} 
+0

È necessario trasformare 'schema' in una proprietà. La serializzazione non funziona sui campi, per quanto posso ricordare. –

+0

L'utilizzo di DataContract significa che devo utilizzare un serializzatore diverso? Non ottengo lo schema $ nel mio json se cambio solo la mia classe Person su ciò che è indicato qui. –

+0

Supponendo che stai usando 'System.Runtime.Serialization.Json' no. Tuttavia non hai specificato quale serializzatore stavi utilizzando, quindi ho presupposto quello fornito qui. Puoi usare 'DataContractJsonSerializer'. – jacob

4

Se si utilizza JSON.NET, è possibile utilizzare l'attributo JsonProperty:

public class Person { 
    [JsonProperty(PropertyName = "$schema")] 
    public string schema {get; set;} = @"lsjdhflsjkdf"; 

    public string name {get;set;} 
} 
Problemi correlati