如何创建一个属性包含点(句点)的json字符串?

时间:2014-04-16 22:07:51

标签: c# json.net

我试图发送一个HttpRequest,它接受​​一个像这样的JSON对象:

{
   "some.setting.withperiods":"myvalue"
}

我一直在为我的其他请求创建匿名对象,但由于名称中包含一个点,我无法使用此对象。

我知道我可以创建一个类并指定[DataMember(Name="some.setting.withperiods")]属性,但必须有一个更轻量级的解决方案。

6 个答案:

答案 0 :(得分:6)

没有“简单”的方法来实现这一点,因为C#中的.是保留的。

但是,通过使用字典和集合初始化程序,您可以实现非常接近的目标。它仍然有点孤立,并且不需要您创建自定义类。

var obj = new Dictionary<string, object>
{
    { "some.setting.withperiods", "myvalue" }
};

var json = JsonConvert.SerializeObject(obj);
//{"some.setting.withperiods":"myvalue"}

答案 1 :(得分:5)

您可以使用相同的“JsonProperty”属性例如

    [JsonProperty(".Name")]
    public string Name { get; set; }

答案 2 :(得分:1)

除此之外,我想添加如何从json中检索数据,其中name具有以特殊字符开头的name属性,如在Web API 2.0中具有&#34; .issued&#34;。

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
var jsonRespons="json response from the web api";
var issue= JObject.Parse(jsonResponse).GetValue(".issued");

答案 3 :(得分:0)

如果您在javascript中执行此操作,则可以轻松地来回移动,如下所示:

var obj = {
    "some.setting.withdots":"myvalue"
};
var json = JSON.stringify(obj);
console.log(json);
var str = JSON.parse(json);
console.log(str);

您是否尝试将其放入序列化字符串并发送,然后在客户端进行反序列化?

你可以做点什么

var myAnnon = new
{
    WithPeriod = "value"
};
var j = JsonConvert.SerializeObject(myAnnon);
j = j.Replace("WithPeriod", "some.setting.withdots");

答案 4 :(得分:0)

您可以使用JObject(Json.Net的LINQ-to-JSON API的一部分)来创建相关的JSON:

string json = new JObject(new JProperty("some.setting.withperiods", "myvalue")).ToString();

小提琴:https://dotnetfiddle.net/bhgTta

答案 5 :(得分:-1)

您可以尝试为您的会员名称添加前缀@以允许使用文字,但是这样做的方法是使用[DataMember],就像您在问题