我使用现有的API而无法更改它。
所以我有一些变量 - CellProviderID。
看起来它是一个int,因为当我设置int值时,服务器返回预期的响应。
"CellProviderID":5,"CellProviderID2":7,"CellProviderID3":2
当我将此值保留为空时出现问题,并且在序列化后我得到:
"CellProviderID":0,"CellProviderID2":0,"CellProviderID3":0
因为0是int类型的默认值。并且服务器返回错误:
{“ErrorCode”:10,“ErrorMessage”:“指定了单元格提供程序,但单元格编号为空,指定了Pager提供程序,但是寻呼机编号为空”}
所以它看起来更像是一些枚举,0没有值。
当我从
更改序列化的json时,它运行良好"CellProviderID":0,"CellProviderID2":0,"CellProviderID3":0
到
"CellProviderID":"","CellProviderID2":"","CellProviderID3":""
当我将此属性设置为空时,我应该如何初始化属性以设置int值并获取“”?
[JsonProperty]
public int CellProviderID { get; set; }
[JsonProperty]
public int CellProviderID2 { get; set; }
[JsonProperty]
public int CellProviderID3 { get; set; }
答案 0 :(得分:2)
您可以将商家的退货类型从int
更改为int?
,这样您就会获得null
值作为默认值。
它将被序列化为
"CellProviderID":null,"CellProviderID2":null,"CellProviderID3":null
所以你可以达成协议。
接下来,您必须更改序列化以忽略null
值。如果您正在使用Json.Net
,则序列化必须如下所示:
JsonConvert.SerializeObject(movie,Formatting.Indented, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore })
因此,您的服务器将不会收到未初始化的值
答案 1 :(得分:2)
您可以选择编写自定义JsonConverter并自行处理自定义序列化/反序列化。
internal class Inherited
{
public int MyProperty { get; set; }
public int MyProperty2 { get; set; }
}
internal class CustomConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(Inherited);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
var data = value as Inherited;
if (data != null)
{
writer.WriteStartObject();
foreach (var item in typeof(Inherited).GetProperties())
{
writer.WritePropertyName(item.Name);
switch (item.PropertyType.Name)
{
case "Int32":
{
writer.WriteValue(default(int) == (int)item.GetValue(data, null) ? "" : item.GetValue(data, null).ToString());
break;
}
}
}
writer.WriteEnd();
}
}
}
JsonSerializerSettings obj = new JsonSerializerSettings();
obj.Converters.Add(new CustomConverter());
var result = JsonConvert.SerializeObject(new Inherited(0) { MyProperty = 0, MyProperty2 = 0 }, obj);
结果 - {" myProperty的":""" MyProperty2":""}