2015-07-13 14 views
6

Đây là chuỗi JSON:Làm cách nào để giữ giá trị JSON dưới dạng Chuỗi?

{"name":"Chris","home":[],"children":[{"name":"Belle"},{"name":"O"}]} 

Tôi thường tạo đối tượng tùy chỉnh như thế này:

public class Child 
{ 
    public string name { get; set; } 
} 

public class RootObject 
{ 
    [DataMember] 
    public string name { get; set; } 
    [DataMember] 
    public List<object> home { get; set; } 
    [DataMember] 
    public List<Child> children { get; set; } 
} 

Nhưng bây giờ tôi không muốn con cái như Danh sách,

Tôi chỉ muốn để ghi lại/serialize trẻ em như String, không phải trẻ em. Có nghĩa là tôi không quan tâm đến phần này: [{"name": "Belle"}, {"name": "O"}] là STRING, KHÔNG Mảng/Danh sách.

Tôi có thể làm như thế nào? Tôi đang sử dụng phương thức DataContractJSONSeriliazer.ReadObject.

+0

tôi không thể giúp bạn với 'DataContractJSONSeriliazer' nhưng tôi có nhu cầu tương tự (để giữ một số phần của JSON hoang sơ) với Newtonsoft JSON.net. Ở đó tôi có thể sử dụng lớp 'JObject' hoặc' JArray' như là một mục tiêu tuần tự hóa để giữ một trường một JSON đơn giản. Có lẽ bạn có thể tìm thấy một cái gì đó tương tự. –

+0

Vui lòng xem liệu điều này có thể giúp bạn: https://msdn.microsoft.com/en-us/library/bb943471(v=vs.110).aspx –

+0

xóa trẻ em dưới dạng ứng cử viên tuần tự, thêm chuỗi thuộc tính mới hoặc tương tự tên, có thuộc tính get của chuỗi con trả về một chuỗi từ danh sách con. –

Trả lời

3

Vì bạn không ngại sử dụng thư viện khác, tôi sẽ đề xuất NewtonSoft JSON.NET. Có các lớp ở đó (JObject, JArray, v.v.) có thể đại diện cho dữ liệu JSON tùy ý như một phần của một số đối tượng được nhập mạnh mẽ. Tôi đã sử dụng điều này để deserialize một số JSON lớn mà chỉ một phần nhỏ là thú vị với tôi. Tôi có thể deserialize toàn bộ JSON, sửa đổi một phần đó là quan trọng và serialize trở lại, giữ cho một phần không liên quan bị ảnh hưởng.

Dưới đây là mẫu mã để lấy children làm chuỗi, mặc dù nó là một mảng trong JSON. Điều quan trọng là bạn có thể sửa đổi nội dung của các trường khác (namehome) và tuần tự hóa toàn bộ, và children trong đầu ra JSON sẽ vẫn là một mảng có nội dung gốc.

Giả sử

using Newtonsoft.Json; 
using Newtonsoft.Json.Linq; 

đây là mẫu mã:

public class RootObject 
{ 
    public string name; 
    public List<object> home; 
    public JArray children; // I don't care what children may contain 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     string sourceJSON = 
      @"{""name"":""Chris"",""home"":[],""children"":[{""name"":""Belle""},{""name"":""O""}]}"; 
     RootObject rootObject = JsonConvert.DeserializeObject<RootObject>(sourceJSON); 
     string partAsString = rootObject.children.ToString(Formatting.None); 
     // partAsString is now: [{"name":"Belle"},{"name":"O"}] 
    } 
} 
+0

Hoàn hảo !, chính xác những gì tôi đang tìm kiếm. Đánh dấu là câu trả lời. –

1

Dựa trên sự hiểu biết của tôi về câu hỏi của bạn, bạn có thể sử dụng Json.Net, và thêm một tài sản dummy.

enter image description here

internal class Program 
{ 
    private static void Main(string[] args) 
    { 
     string json = "{\"name\":\"Chris\",\"home\":[],\"children\":[{\"name\":\"Belle\"},{\"name\":\"O\"}]}"; 

     RootObject result = JsonConvert.DeserializeObject<RootObject>(json); 

     Console.ReadLine(); 
    } 
} 

public class Child 
{ 
    [JsonProperty(PropertyName = "name")] 
    public string Name { get; set; } 
} 

public class RootObject 
{ 
    [JsonProperty(PropertyName = "name")] 
    public string Name { get; set; } 

    [JsonProperty(PropertyName = "home")] 
    public List<object> Home { get; set; } 

    [JsonProperty(PropertyName = "children")] 
    public List<Child> ChildrenCollection { get; set; } 

    [JsonIgnore] 
    public string Children 
    { 
     get 
     { 
      // You can format the result the way you want here. 
      return string.Join(",", ChildrenCollection.Select(x => x.Name)); 
     } 
    } 
} 
+0

Cảm ơn sự đóng góp của bạn. Câu trả lời khác hoạt động hoàn hảo cho tôi trong trường hợp này. Tôi hy vọng những người khác sẽ tìm thấy câu trả lời của bạn hữu ích. –

+0

Tôi rất vui vì bạn đã tìm ra. Thành thật mà nói, tôi thích câu trả lời của Kuba Wyrostek hơn tôi. – Win

Các vấn đề liên quan