在为 HTTPClient 创建 StringContent 时,如何通过 DataContractJsonSerializer 隐式序列化?
How can I implicitly serialize via DataContractJsonSerializer when creating StringContent for HTTPClient?
我有一个对象,我将其转换为 json 以便将其发送到 Web 服务。
我向 class 添加了一个方法 returns a json string
public string ToJson()
{
return new JavaScriptSerializer().Serialize(this).ToLower();
}
HTTPClient.PutAsync()
方法接受一个 StringContent
对象,我是这样创建的:
var content = new StringContent(object.ToJson(), Encoding.UTF8, "application/json");
我可以打电话给 PutAsync()
,一切正常。
我最近发现了一种不同的序列化方法,它使用 [DataContract]
、[DataMember]
、DataContractJsonSerializer
和 Stream 来序列化一个对象。我想改用这种方法,因为它可以更好地控制属性的结果,但需要更多的样板代码(写入流、重新定位、读取等)。
鉴于我使用数据属性来指定我的对象应该如何序列化,我如何指定应该使用 DataContractJsonSerializer
来序列化它?最好,我可以简单地将对象传递给 StringContent
而无需显式方法调用,如下所示:
var content = new StringContent(object, Encoding.UTF8, "application/json");
类似于在某些情况下隐式调用 ToString()
的方式,我想知道是否有任何理解如果我将内容类型指定为 "application/json"
,则传递的对象应该序列化为 json.
您可以尝试调整 ToJson
方法,使其使用 DataContractJsonSerializer
代替:
public string ToJson()
{
var serializer = new DataContractJsonSerializer(this.GetType());
using (var stream = new MemoryStream())
{
serializer.WriteObject(stream, this);
return Encoding.UTF8.GetString(stream.ToArray());
}
}
顺便问一下,您是否考虑过使用 Newtonsoft.Json
库?它还通过 [JsonProperty]
属性和自定义转换器为您提供对序列化过程的大量控制:
public string ToJson()
{
return JsonConvert.SerializeObject(this);
}
我有一个对象,我将其转换为 json 以便将其发送到 Web 服务。 我向 class 添加了一个方法 returns a json string
public string ToJson()
{
return new JavaScriptSerializer().Serialize(this).ToLower();
}
HTTPClient.PutAsync()
方法接受一个 StringContent
对象,我是这样创建的:
var content = new StringContent(object.ToJson(), Encoding.UTF8, "application/json");
我可以打电话给 PutAsync()
,一切正常。
我最近发现了一种不同的序列化方法,它使用 [DataContract]
、[DataMember]
、DataContractJsonSerializer
和 Stream 来序列化一个对象。我想改用这种方法,因为它可以更好地控制属性的结果,但需要更多的样板代码(写入流、重新定位、读取等)。
鉴于我使用数据属性来指定我的对象应该如何序列化,我如何指定应该使用 DataContractJsonSerializer
来序列化它?最好,我可以简单地将对象传递给 StringContent
而无需显式方法调用,如下所示:
var content = new StringContent(object, Encoding.UTF8, "application/json");
类似于在某些情况下隐式调用 ToString()
的方式,我想知道是否有任何理解如果我将内容类型指定为 "application/json"
,则传递的对象应该序列化为 json.
您可以尝试调整 ToJson
方法,使其使用 DataContractJsonSerializer
代替:
public string ToJson()
{
var serializer = new DataContractJsonSerializer(this.GetType());
using (var stream = new MemoryStream())
{
serializer.WriteObject(stream, this);
return Encoding.UTF8.GetString(stream.ToArray());
}
}
顺便问一下,您是否考虑过使用 Newtonsoft.Json
库?它还通过 [JsonProperty]
属性和自定义转换器为您提供对序列化过程的大量控制:
public string ToJson()
{
return JsonConvert.SerializeObject(this);
}