ServiceStack.如何将文本类序列化为JSon

本文关键字:序列化 JSon 文本 ServiceStack | 更新日期: 2023-09-27 18:07:41

刚刚下载ServiceStack。文本在我的ASP.NET中使用它。我有一个具有许多属性的类,并希望将其中的五个(字符串,整数,二进制)序列化为JSON。谁可以张贴简单的例子,如何从我的类创建JSon对象?

ServiceStack.如何将文本类序列化为JSon

默认情况下ServiceStack将反序列化POCO的所有公共属性。

如果你只想序列化几个属性,那么你想用[DataContract], [DataMember]属性来装饰你的类(如果你使用MS DataContractJsonSerializer,你会用同样的方式),例如:

[DataContract]
public class MyClass
{
    public string WillNotSerializeString { get; set; }
    [DataMember]
    public string WillSerializeString { get; set; }
    [DataMember]
    public int WillSerializeInt { get; set; }
    [DataMember]
    public byte[] WillSerializeByteArray { get; set; }
}
然后你可以使用JsonSerializer上的静态实用程序方法来(反)序列化它,或者使用更简洁的扩展方法,例如:
var dto = new MyClass { WillSerializeString = "some text" };
string json = dto.ToJson();
MyClass fromJson = json.FromJson<MyClass>();
编辑:

正如@Noah提到的(来自评论),你也可以使用[IgnoreDataMember]属性来排除单个属性。

您可以在自定义类中使用[Serializable()]属性,然后:

JavaScriptSerializer serializer = new JavaScriptSerializer();
var Json = serializer.Serialize(myObject);

要忽略正在序列化的对象中的特定属性,只需在它们上面放置[NonSerialized]属性。

更新:

如果你想使用ServiceStack来进行序列化,ServiceStack网站给出了下面的例子:

var customer = new Customer { Name="Joe Bloggs", Age=31 };
var json = JsonSerializer.SerializeToString(customer);
var fromJson = JsonSerializer.DeserializeFromString<Customer>(json);

来源:http://www.servicestack.net/mythz_blog/?p=344

servicestack的测试证明,通过提供[DataContract][DataMember]属性,您可以确定哪个正在被序列化,哪个没有。

测试:https://github.com/ServiceStack/ServiceStack.Text/blob/master/tests/ServiceStack.Text.Tests/DataContractTests.cs

对象测试:https://github.com/ServiceStack/ServiceStack.Text/blob/master/tests/ServiceStack.Text.Tests/Support/DdnDtos.cs