我正在玩C#中的弹性搜索,我想用C#中的匿名类型创建一个查询,并将其序列化为JSON。但我跑了一个问题,因为我需要JSON看起来像这样的一个部分:是否有可能在C#中有一个名为bool的字段?
{"bool": {<unimportant for question>}}
这将转化为具有一个名为布尔场C#类。这可能吗? (我的猜测是......)
我想我需要自定义序列化,或者弹性搜索为bool提供了一些其他的替代名称。
我正在玩C#中的弹性搜索,我想用C#中的匿名类型创建一个查询,并将其序列化为JSON。但我跑了一个问题,因为我需要JSON看起来像这样的一个部分:是否有可能在C#中有一个名为bool的字段?
{"bool": {<unimportant for question>}}
这将转化为具有一个名为布尔场C#类。这可能吗? (我的猜测是......)
我想我需要自定义序列化,或者弹性搜索为bool提供了一些其他的替代名称。
如果您想为变量指定与关键字相同的名称,可以用@
作为前缀。
bool @bool = false;
我会尽可能避免在所有情况下这样做。这只是简单的混淆。
是的,我只是尝试一些新技术没有什么严重的。感谢“@”完美地工作 – Konstantin
使用DateMember
属性来指定哪些序列化的名字是:
[DataMember(Name = "bool")]
public string MyBoolean { get; set; }
参见:JavaScriptSerializer.Deserialize - how to change field names
谢谢,这是我通常会做的,但我试图用匿名类型... – Konstantin
您可以在[DataMember]
属性设置的名字,但你需要使用真正的类(不匿名)。
using System;
using System.Collections;
using System.IO;
using System.Runtime.Serialization;
using System.Xml;
// You must apply a DataContractAttribute or SerializableAttribute
// to a class to have it serialized by the DataContractSerializer.
[DataContract()]
class Enterprise : IExtensibleDataObject
{
[DataMember(Name = "bool")]
public bool CaptainKirk {get; set;}
// more stuff here
}
更多信息:http://msdn.microsoft.com/en-us/library/system.runtime.serialization.datamemberattribute.aspx
'bool'是在.NET中有效的字段名。但是为了从C#代码中访问它,您需要使用@ @,正如@funm的回答所示。 – Vlad
我现在添加了misisng引号 – Konstantin