我正在使用 Json.NET 序列化要发送到紧凑型框架 3.5 设备的对象(我很幸运)。
我在紧凑型设备上的课程是:
public class Specification
{
public Guid Id { get; set; }
public String Name { get; set; }
public String Instructions { get; set; }
}
返回发送到设备的 Json 是(注意 null 指示):
string json = @"{""Name"":""Test"",""Instructions"":null,""Id"":""093a886b-8ed4-48f0-abac-013f917cfd6a""}";
...并且用于反序列化 json 的方法是...
var result = JsonConvert.DeserializeObject<Specification>(json);
在服务器上,我使用以下内容创建 Json:
var serializer = new JsonSerializer();
serializer.Formatting = Formatting.None;
serializer.Serialize(context.HttpContext.Response.Output, this.Data);
问题在于,在紧凑框架上,它无法将值放入 result.Instructions 中,这会在稍后在代码中引用它时导致空引用。
我正在使用 Newtonsoft.Json.Compact v3.5.0.0(我认为这是最新版本),而在服务器上我使用的是 Newtonsoft.Json 4.5.0.0。
问题
我怎么能:
a) 更改服务器代码以在字符串为空的地方粘贴“”而不是空值。
或者
b) 更改紧凑的框架代码以能够处理空值字符串。
我尝试过的事情
我一直在查看 Json.Net 的文档/示例,并尝试了很多东西,比如实现 aDefaultContractResolver
和 custom JsonContract
。也许答案就在其中,但我在这个级别上对 Json.Net 缺乏了解并没有帮助!
更多信息
我使用 System.Runtime.Serialization.Json.DataContractJsonSerializer 进行服务器端序列化,它确实在空字符串的情况下生成引号。不幸的是,我需要更多的序列化灵活性,这就是我开始使用 Json.Net 的原因。
任何提示/提示表示赞赏。