ServiceStack.Text如何将类序列化为JSon

刚刚下载了ServiceStack.Text以在我的ASP.NET中使用它。 我有许多属性的类,并希望将其中五个(字符串,整数,二进制)序列化为JSON。 任何人都可以发布简单的例子如何从我的类创建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上的静态实用程序方法来(De)序列化它,或者更简洁的扩展方法,例如:

 var dto = new MyClass { WillSerializeString = "some text" }; string json = dto.ToJson(); MyClass fromJson = json.FromJson(); 

编辑:

正如@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(json); 

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

servicestack的测试certificate,通过提供[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