2011-01-09 22 views
12

Tôi nhận được nguồn cấp dữ liệu JSON từ Google's data API và rất nhiều tên thuộc tính bắt đầu bằng ký tự $ (ký hiệu đô la).Các lớp C# xử lý các dấu đô la bằng JSON như thế nào?

Vấn đề của tôi là tôi không thể tạo lớp C# với tên biến bắt đầu bằng ký hiệu đô la, không được ngôn ngữ cho phép. Tôi đang sử dụng JSON.NET from Newtonsoft để chuyển đổi các đối tượng JSON thành C#. Làm thế nào tôi có thể giải quyết vấn đề này?

Trả lời

19

Bạn có thể thử bằng cách sử dụng thuộc tính [JsonProperty] để xác định tên:

[JsonProperty(PropertyName = "$someName")] 
public string SomeName { get; set; } 
1

Những mục có dấu đô la ($) thường có nghĩa là siêu dữ liệu và KHÔNG lĩnh vực. Khi JSON.NET tuần tự hóa một đối tượng và bạn yêu cầu nó xử lý các kiểu đối tượng, nó sẽ chèn các mục $ mà biểu thị siêu dữ liệu cho việc deserialization chính xác sau này.

Nếu bạn muốn coi các mục $ làm dữ liệu meta, hãy sử dụng JsonSerializerSettings. Ví dụ:

Dim jsonSettings As New Newtonsoft.Json.JsonSerializerSettings With {.TypeNameHandling = Newtonsoft.Json.TypeNameHandling.All} 
Dim jsonOut As String = Newtonsoft.Json.JsonConvert.SerializeObject(objects, jsonSettings) 

Các TypeNameHandling = Newtonsoft.Json.TypeNameHandling.All nói với JSON để xử lý các kiểu dữ liệu trong khi dựa vào $ để biết thông tin.

Hy vọng điều đó sẽ giúp ..

4

firas489 đang đi đúng hướng $ chỉ ra siêu dữ liệu, không phải là trường dữ liệu thực tế. Tuy nhiên việc sửa chữa được thực sự để làm điều này:

JsonSerializerSettings settings = new JsonSerializerSettings(); 
settings.MetadataPropertyHandling = MetadataPropertyHandling.Ignore;    

Đặt metadata xử lý để bỏ qua, và sau đó bạn có thể serialize/deserialize tài sản sử dụng thuộc tính PropertyName:

[JsonProperty("$id")] 
public string Id { get; set; } 
Các vấn đề liên quan