0

我有一个对象,我将其转换为 json 以便将其发送到 Web 服务。我在类中添加了一个返回 json 字符串的方法

public string ToJson()
{
    return new JavaScriptSerializer().Serialize(this).ToLower();
}

HTTPClient.PutAsync()方法需要一个StringContent对象,我这样创建:

var content = new StringContent(object.ToJson(), Encoding.UTF8, "application/json");

我可以打电话PutAsync(),一切正常。


我最近发现了一种不同的序列化方法,它使用、[DataContract]和Stream 来序列化对象。我想改用这种方法,因为它可以通过属性对结果进行更多控制,但需要更多样板代码(写入流、重新定位、读取等)。[DataMember]DataContractJsonSerializer

鉴于我使用 Data 属性来指定我的对象应该如何序列化,我如何指定DataContractJsonSerializer应该用于序列化它?最好,我可以简单地将对象传递给StringContent而无需显式方法调用,如下所示:

var content = new StringContent(object, Encoding.UTF8, "application/json");

类似于ToString()在某些情况下隐式调用的方式,我想知道是否有任何东西可以理解,如果我将内容类型指定为"application/json",则传递的对象应该序列化为 json。

4

1 回答 1

1

您可以尝试调整该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);
}
于 2016-01-04T13:16:40.647 回答