如何创建一个json字符串,其中一个属性包含一个句点

本文关键字:一个 属性 包含一 句点 字符串 何创建 json 创建 | 更新日期: 2023-09-27 17:58:37

我正在尝试发送一个HttpRequest,它接受如下JSON对象:

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

我一直在为我的其他请求创建匿名对象,但我不能用这个来做,因为名称中包含一个点。

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

如何创建一个json字符串,其中一个属性包含一个句点

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

然而,通过使用字典和集合初始值设定项,您可以实现非常接近的目标。它仍然有些孤立,不需要创建自定义类。

var obj = new Dictionary<string, object>
{
    { "some.setting.withperiods", "myvalue" }
};
var json = JsonConvert.SerializeObject(obj);
//{"some.setting.withperiods":"myvalue"}

您可以将"JsonProperty"属性用于相同的例如

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

除此之外,我想添加如何从json中检索数据,其中json具有以特殊字符开头的名称属性,如Web API 2.0令牌中的".sissued"。

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

如果在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");

您可以使用JObject(Json.Net的LINQ-to-Json API的一部分)来创建有问题的Json:

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

Fiddle:https://dotnetfiddle.net/bhgTta

您可以尝试在成员名称前加上@以允许使用文字,但方法是使用[DataMember],正如您在问题中已经提到的那样。