我正在尝试发送一个HttpRequest
,它接受如下JSON对象:
{
"some.setting.withperiods":"myvalue"
}
我一直在为我的其他请求创建匿名对象,但我不能用这个来做,因为名称中包含一个点。
我知道我可以创建一个类并指定[DataMember(Name="some.setting.withperiods")]
属性,但必须有一个更轻量级的解决方案。
实现这一点没有"简单"的方法,因为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]
,正如您在问题中已经提到的那样。