1

我正在使用 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 的原因。

任何提示/提示表示赞赏。

4

1 回答 1

2

好的 - 没有答案,但是昨天下午我一直在搜索,我上床睡觉,今天早上再次搜索以找到:Serializing null in JSON.NET,这几乎回答了我的问题。

于 2013-01-25T10:56:34.783 回答