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

13

我刚下载了ServiceStack.Text,想在我的ASP.NET项目中使用它。我有一个含有许多属性的类,并且希望将其中的五个属性(string, integer, binary)序列化为JSON格式。是否有人可以提供一个简单的示例,展示如何从我的类创建JSON对象?


需要注意的是,尽管您需要在导入中使用 using ServiceStack;,但 ToJson 方法不仅需要对 ServiceStack 的引用,还需要在您的项目中引用 ServiceStack.Text。 - ruffin
3个回答

20

默认情况下,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]属性来排除单个属性。


1
同样地,如果您想要序列化所有属性“除了”一个,您可以只在该属性上使用[IgnoreDataMember]进行修饰,但是在这种情况下,您不应该对类使用[DataContract]进行修饰,否则它将无法按预期工作。我在一个项目中刚刚使用ServiceStack做到了这一点,并且很高兴看到它起作用了。 - Noah Heldman
请注意:序列化/反序列化所有公共>属性<,不包括>字段<。 - Stefan Steiger
@Quandary 对的,你需要设置 JsConfig.IncludePublicFields = true; 来序列化公共字段,请参考:http://stackoverflow.com/a/15372520/85785 - mythz

6
您可以在自定义类上使用[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

这篇文章探讨了在IT技术领域中,缓存技术的重要性以及如何根据需求选择最适合的缓存策略。作者指出,缓存可以提高应用程序性能并减少服务器负载。同时,他还详细介绍了三种不同类型的缓存:本地缓存、分布式缓存和基于云的缓存。最后,他强调了缓存的使用必须考虑到内存和网络带宽的限制,并建议开发人员进行性能测试来优化缓存策略。


2
我不想使用微软序列化器,因为它非常慢。我想问一下ServiceStack.Text。 - Tomas
1
如果你特别关注ServiceStack.Text,那么什么阻止你下载他们的示例项目并查看一下呢? - Jamie Dixon
ServiceStack的网站甚至展示了如何使用它:http://www.servicestack.net/mythz_blog/?p=344 - Jamie Dixon
我已经搜索了他们的网站并找到了你提到的示例。我不想序列化整个类,我想选择要序列化的属性,并使用ServiceStack.Text构建自己的JSon对象。 - Tomas

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接