使用C#对象创建JSON
我正在尝试创建以下JSON数据:使用C#对象创建JSON,c#,asp.net-mvc,json,C#,Asp.net Mvc,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' ] } 我正在使用C#并
{
'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'
]
}
我正在使用C#并试图创建一个对象来实现这一点……类似于:
public class chart{
public string[] chart.labels {get;set;}
public string[] chart.tooltips {get;set;}
}
但显然我不能有包含空格的属性
我该怎么做呢
更新:
使用JamieC的答案,下面的工作非常有效
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; }
}
}
您可以使用JSON.NET库,您可以从 它有以下特点: 属性属性名称自定义 这个问题将帮助您:
您可以使用DataContractJsonSerializer它提供此功能,但JavaScriptSerializer不是。通常的方法是使用
DataContractJsonSerializer
将对象转换为Json,并使用DataMember
属性注释属性使用的名称:
[DataContract]
public class ChartModel{
[DataMember(Name = "chart.labels")]
public string[] Labels {get;set;}
[DataMember(Name = "chart.tooltips")]
public string[] Tooltips {get;set;}
}
我个人使用自己的ActionResult
在MVC中总结序列化:
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);
}
}
并从基本控制器中的帮助器方法返回:
public abstract class MyBaseController: Controller
{
protected JsonDataContractResult JsonContract(Object data)
{
return new JsonDataContractResult(data);
}
}
然后我的控制器变得非常简单:
public class SomeController: MyBaseController
{
public ActionResult SomeAction()
{
var model = new ChartModel()
{
Labels = ...,
Tooltips = ...
};
return JsonContract(model);
}
}
对于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。您的意思是“包含句点的属性”吗?绝对正确。很棒的库。谢谢JamieC-现在简单的部分可以用了。将在下一步添加您的方法:)
public class ChartModel{
[JsonProperty("chart.labels")]
public string[] Labels {get;set;}
[JsonProperty("chart.tooltips")]
public string[] Tooltips {get;set;}
}