2012-12-19 15 views
9

मैं निम्नलिखित JSON डेटा बनाने के लिए कोशिश कर रहा हूँ:सी # ऑब्जेक्ट के साथ JSON बनाएं

{ 
'chart.labels': ['Bob','Lucy','Gary','Hoolio'], 
'chart.tooltips': ['Bob did well', 
       'Lucy had her best result', 
       'Gary - not so good', 
       'Hoolio had a good start' 
       ] 
} 

मैं सी # का उपयोग कर रहा है और ऐसा करने के लिए में एक वस्तु बनाने का प्रयास कर ..... कुछ की तरह:

public class chart{ 
public string[] chart.labels {get;set;} 
public string[] chart.tooltips {get;set;} 
} 

लेकिन स्पष्ट रूप से मेरे पास रिक्त स्थान वाले गुण नहीं हो सकते हैं।

मैं यह करने के बारे में कैसे जाउंगा?

अद्यतन:

JamieC के जवाब का उपयोग करते हुए निम्न कार्य perfecly

public virtual ActionResult CompanyStatus() 
    { 
     var labelList = new List<string>() { "Bob", "Lucy", "Gary", "Hoolio" }; 
     var tooltipsList = new List<string>() { "Bob did well", "Lucy had her best result", "Gary - not so good", "Hoolio had a good start" }; 

     var cData = new chartData() 
     { 
      Labels = labelList.ToArray(), 
      Tooltips = tooltipsList.ToArray() 
     }; 

     var serializer = new DataContractJsonSerializer(cData.GetType()); 
     String output; 
     using (var ms = new MemoryStream()) 
     { 
      serializer.WriteObject(ms, cData); 
      output = Encoding.Default.GetString(ms.ToArray()); 
     } 

     return this.Content(output); 
    } 


    [DataContract] 
    public class chartData 
    { 
     [DataMember(Name = "chart.labels")] 
     public string[] Labels { get; set; } 

     [DataMember(Name = "chart.tooltips")] 
     public string[] Tooltips { get; set; } 

    } 
} 

कौन सा पैदा करता है:

{"chart.labels":["Bob","Lucy","Gary","Hoolio"],"chart.tooltips":["Bob did well","Lucy had her best result","Gary - not so good","Hoolio had a good start"]} 
+1

क्या आपका मतलब है "गुण जिसमें अवधि (बिंदु)" होती है? –

उत्तर

10

यह करने के लिए हमेशा की तरह Json में अपने वस्तु चालू करने के लिए एक DataContractJsonSerializer उपयोग करने के लिए, और DataMember टिप्पणी करने के लिए क्या नाम गुणों के लिए उपयोग करने के लिए विशेषताओं का उपयोग है:

[DataContract] 
public class ChartModel{ 
[DataMember(Name = "chart.labels")] 
public string[] Labels {get;set;} 
[DataMember(Name = "chart.tooltips")] 
public string[] Tooltips {get;set;} 
} 

मैं व्यक्तिगत रूप से उपयोग करने के अपने ही ActionResult रैप करने के लिए

public class JsonDataContractResult : ActionResult 
{ 
    public JsonDataContractResult(Object data) 
    { 
     this.Data = data; 
    } 

    protected JsonDataContractResult() 
    { 

    } 

    public Object Data { get; private set; } 

    public override void ExecuteResult(ControllerContext context) 
    { 
     Guard.ArgumentNotNull(context, "context"); 

     var serializer = new DataContractJsonSerializer(this.Data.GetType()); 
     String output; 
     using (var ms = new MemoryStream()) 
     { 
      serializer.WriteObject(ms, this.Data); 
      output = Encoding.Default.GetString(ms.ToArray()); 
     } 
     context.HttpContext.Response.ContentType = "application/json"; 
     context.HttpContext.Response.Write(output); 
    }   
} 

और वापसी कि एक आधार नियंत्रक में एक सहायक विधि से:

MVC में क्रमबद्धता अप

तब मेरे नियंत्रक बहुत आसान हो जाता है:

public class SomeController: MyBaseController 
{ 
    public ActionResult SomeAction() 
    { 
     var model = new ChartModel() 
        { 
         Labels = ..., 
         Tooltips = ... 
        }; 
     return JsonContract(model); 
    } 
} 
+0

धन्यवाद जेमीसी - अब काम कर रहा सरल हिस्सा मिला। अगले तरीकों को जोड़ देंगे :) –

2

आप JSON.NET पुस्तकालय का उपयोग कर सकते हैं, आप इसे here से डाउनलोड कर सकते हैं

गुण संपत्ति नाम अनुकूलन

यह सवाल तुम्हारी मदद करेगा: +४६५१०४०३२१० यह इस सुविधा है

Json.Net: JsonSerializer-Attribute for custom naming

और तुम DataContractJsonSerializer उपयोग कर सकते हैं यह इस सुविधा प्रदान करता है, लेकिन जावास्क्रिप्टसेरियलाइज़र नहीं है।

+1

बिल्कुल। बहुत बढ़िया पुस्तकालय। –

0

MVC परियोजना के लिए Newtonsoft.Json पुस्तकालय उपलब्ध है, तो मॉडल में JsonProperty देना

(आप मैन्युअल रूप से अन्य परियोजनाओं के लिए इस में शामिल करने के लिए है) यह पसंद है। ...

public class ChartModel{ 
    [JsonProperty("chart.labels")] 
    public string[] Labels {get;set;} 
    [JsonProperty("chart.tooltips")] 
    public string[] Tooltips {get;set;} 
} 

और Newtonsoft.Json.JsonConvert.SerializeObject(object); या Json.Encode(object) का उपयोग JSON में बदलने के लिए।

संबंधित मुद्दे