WebApi - 已发送的 Guid 作为新的 Guid
WebApi - Sent Guid taken as a new Guid
我有一个 ApiController
class 的方法接受一个复杂的对象。
public class SampleController : ApiController
{
[Route("api/Sample/")]
[HttpPost]
public HttpResponseMessage GetSampleInfo([FromBody]SampleClass sampleClassObject)
{
// Some code
}
}
调试时调用了这个Controller
class方法,但是在对象中作为Guid
传递的,显示了一个新的Guid
(作为00000000-0000-0000-0000-000000000000
).我首先使用 Postman 检查此方法。我尝试使用 x-www-form-urlencoded
和 application/json
传递对象。
我传递的内容邮递员:
{
"sampleID": "A9A999AA-AA99-9AA9-A999-9999999999AA",
"otherValue": 1
}
我检查了其他类似我的问题,但我已经尝试了解决方案,但我仍然将通过的 Guid
作为新的 Guid
。
P.S。
SampleClass
如下所示:
public class SampleClass
{
public Guid sampleID { get; set; }
public int otherValue { get; set; }
}
更新:
下面的我用过JsonConverter
.
public class GuidConverterCustom : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return typeof(Guid) == objectType;
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
switch (reader.TokenType)
{
case JsonToken.Null:
return Guid.Empty;
case JsonToken.String:
string str = reader.Value as string;
if (string.IsNullOrEmpty(str))
{
return Guid.Empty;
}
else
{
return new Guid(str);
}
default:
throw new ArgumentException("Invalid token type");
}
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
if (Guid.Empty.Equals(value))
{
writer.WriteValue("");
}
else
{
writer.WriteValue((Guid)value);
}
}
}
并在 Global.asax.cs
中包含以下内容:
JsonConvert.DefaultSettings = () =>
{
var settings = new JsonSerializerSettings();
settings.Converters.Add(new GuidConverterCustom());
return settings;
};
我有一个 ApiController
class 的方法接受一个复杂的对象。
public class SampleController : ApiController
{
[Route("api/Sample/")]
[HttpPost]
public HttpResponseMessage GetSampleInfo([FromBody]SampleClass sampleClassObject)
{
// Some code
}
}
调试时调用了这个Controller
class方法,但是在对象中作为Guid
传递的,显示了一个新的Guid
(作为00000000-0000-0000-0000-000000000000
).我首先使用 Postman 检查此方法。我尝试使用 x-www-form-urlencoded
和 application/json
传递对象。
我传递的内容邮递员:
{
"sampleID": "A9A999AA-AA99-9AA9-A999-9999999999AA",
"otherValue": 1
}
我检查了其他类似我的问题,但我已经尝试了解决方案,但我仍然将通过的 Guid
作为新的 Guid
。
P.S。
SampleClass
如下所示:
public class SampleClass
{
public Guid sampleID { get; set; }
public int otherValue { get; set; }
}
更新:
下面的我用过JsonConverter
.
public class GuidConverterCustom : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return typeof(Guid) == objectType;
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
switch (reader.TokenType)
{
case JsonToken.Null:
return Guid.Empty;
case JsonToken.String:
string str = reader.Value as string;
if (string.IsNullOrEmpty(str))
{
return Guid.Empty;
}
else
{
return new Guid(str);
}
default:
throw new ArgumentException("Invalid token type");
}
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
if (Guid.Empty.Equals(value))
{
writer.WriteValue("");
}
else
{
writer.WriteValue((Guid)value);
}
}
}
并在 Global.asax.cs
中包含以下内容:
JsonConvert.DefaultSettings = () =>
{
var settings = new JsonSerializerSettings();
settings.Converters.Add(new GuidConverterCustom());
return settings;
};