C# 使用时出现语法错误?在c(.net 4.6)中属性名称的末尾

C# 使用时出现语法错误?在c(.net 4.6)中属性名称的末尾,c#,C#,我需要做些什么来支持新移民?在c中变量/属性的末尾 以下示例代码段: using System; using System.Collections.Generic; using System.Runtime.Serialization; [DataContract] public class Foo { [DataMember( Name = "available?" )] public bool available? { get; set; } } 在代码视图中产生以下语法

我需要做些什么来支持新移民?在c中变量/属性的末尾

以下示例代码段:

using System;
using System.Collections.Generic;
using System.Runtime.Serialization;

[DataContract]
public class Foo {

   [DataMember( Name = "available?" )]
   public bool available? { get; set; }

}
在代码视图中产生以下语法错误:

更多信息 这始于我从google.com的请求返回部分复制json数据,并使用以下选项将其粘贴到中:

哪个输出对我来说是一个不错的DataContract,但是一些属性使用了?null/或限定符,IDE似乎没有注册它们。是否有参考资料或其他需要添加的内容?

?令牌不在属性/方法名称的末尾,除非充当空传播运算符

有几种情况下,a?符号是C中的有效标记,最常见的是:

值类型声明public int上可为null的语法?NullableInteger{get;set;} 如果a==b,在三元运算符/内联中使用?0 : 5 空传播运算符C6.0功能,在方法/属性调用someNullableType?属性之前充当空检查的语法糖 我不确定你想要哪一个,可能是第一个

由于您更新了问题:

你使用的网站jsonutils.com给了你一个格式错误的C。它甚至没有尝试验证它给你的属性名,而是在C中找到任何标识符,然后说是的,没问题。一点也不好

如果JSON数据有一个问号作为属性名,那么应该将其保留在DataMember声明中,但将其从C属性中删除

[DataMember(Name = "available?")]
public bool Available { get; set; }
在C语言中,一个属性/方法标识符不能有一个很大的符号列表,基本上除了下划线之外没有其他符号。顺便说一句,我不是把数字当作符号来计算的。这意味着,当我们必须处理JSON、XML等数据时,如果数据中有一个格式不正确的C标识符,而该标识符在诸如available?之类的引号中对JSON有效,那么我们必须解决这个问题

这是DataMemberName=可用的吗?属性为。我们用它来表示我们想要的JSON中的项是可用的,但它位于C中的available属性中。这在基于web的JSON中非常常见,自从我第一次遇到JSON+C以来,我从未从任何内容中省略过DataMemberAttribute

在这种情况下,是否可用?看起来不是空的,但我可能错了。你不应该需要布尔?,应该是布尔

如果我错了,可用的是空的,那么它是公共bool

如果你看一下你的JSON,它非常方便——你自己编写这些类,你会发现web生成器并不好:

相应的C属性为:

[DataMember(Name = "available?")]
public bool Available { get; set; }

[DataMember(Name = "registered?")]
public bool Registered { get; set; }

生成器确实承担了大部分工作,必须在格式非常好的json之间来回切换,向上滚动以获得更大的块,而源类却发现您遗漏了一个参数,从而导致整个契约失败。换几个?更简单、更可靠,特别是对于像暴雪apiI那样层叠更深的json,我认为既然您给它一个[DataMember]属性,那么您也可以给它一个符合约定的标识符,并称之为IsAvailable和IsRegistered。但答案很好。评论不是为了长时间的讨论;这段对话已经结束。
[DataMember(Name = "available?")]
public bool Available { get; set; }

[DataMember(Name = "registered?")]
public bool Registered { get; set; }