2016-01-18 24 views
9

在C#中,我建立一个类(这里简化讨论的目的),最终将被序列化到一些外部定义的JSON:C# - 如何在一个变量名中使用无效字符

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

在我代码我会是这样的:

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

在我的代码$架构上面是CAU唱出“意想不到的人物''错误。有没有解决方法?

+0

都能跟得上。 C#只具有不同于JavaScript的变量命名规则。当然,您可以使用将字符串映射到对象的字典,尽管我建议不要这样做。 – Cameron

+0

[使用JavaScriptSerializer将地图实体映射到JSON](http://stackoverflow.com/questions/6398171/map-entity-to-json-using-javascriptserializer) – YK1

回答

11

将属性[DataContract]提供给您的Person类。

另外,你的意思是使schemaconst

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

您需要将'schema'转换为属性。据我所知,序列化在字段上不起作用。 –

+0

使用DataContract是否意味着我需要使用不同的序列化程序?如果我只是将我的Person类更改为此处指示的内容,我不会在我的json中获得$ schema。 –

+0

假设你正在使用'System.Runtime.Serialization.Json' no。但是你没有指定你正在使用的序列化程序,所以我假定这里提供了一个序列化程序。你可以使用'DataContractJsonSerializer'。 – jacob

4

如果使用JSON.NET,你可以使用JsonProperty属性:

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

    public string name {get;set;} 
} 
相关问题