2016-01-18 9 views
9

In C# Ich baue eine Klasse (hier zu Diskussionszwecken vereinfacht), die in eine extern definierten JSON serialisiert werden schließlich:C# - wie ungültige Zeichen zu verwenden, in einem Variablennamen

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

In meinem Code würde ich so etwas wie:

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); 

In meinem Code über dem $ Schema ist CAU sing einen "Unerwarteten Charakter '$' Fehler. Gibt es eine Problemumgehung?

+0

Nope. C# hat einfach andere Namensregeln für Variablen als JavaScript. Sie könnten natürlich immer ein Wörterbuch verwenden, das Strings Objekten zuordnet, obwohl ich dagegen empfehle. – Cameron

+0

Mögliches Duplikat von [Entität zu JSON mit JavaScriptSerializer zuordnen] (http://stackoverflow.com/questions/6398171/map-entity-to-json-using-javascriptserializer) – YK1

Antwort

11

Geben Sie das Attribut [DataContract] Ihrer Klasse Person.

Auch meinst du, schemaconst zu machen?

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

Sie müssen 'schema' in eine Eigenschaft umwandeln. Serialisierung funktioniert nicht auf Feldern, soweit ich mich erinnern kann. –

+0

Bedeutet die Verwendung von DataContract, dass ich einen anderen Serializer verwenden muss? Ich bekomme das $ -Schema in meinem JSON nicht, wenn ich nur meine Personenklasse in das, was hier angezeigt wird, ändere. –

+0

Angenommen, Sie verwenden 'System.Runtime.Serialization.Json' nicht. Allerdings haben Sie nicht angegeben, welchen Serializer Sie verwendet haben. Sie können 'DataContractJsonSerializer' verwenden. – jacob

4

Wenn JSON.NET verwenden, können Sie das JsonProperty Attribut verwenden:

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

    public string name {get;set;} 
} 
Verwandte Themen