2011-09-05 104 views
12

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

+0

导入需要注意的是,虽然你需要使用'ServiceStack;'你进口,'ToJson'方法不仅需要裁判ServiceStack还需要在您的项目中对ServiceStack.Text的引用。 – ruffin

回答

17

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

同样,如果你想让所有属性序列化为_except_,你可以用'[IgnoreDataMember]'来装饰属性,但是你不应该在这种情况下用'[DataContract]'装饰类,或者它不会像预期。我刚刚在一个项目中使用了ServiceStack,并很高兴地看到它的工作。 –

+0

注意:序列化/反序列化所有公共>属性<,不包含>字段<。 –

+0

@Quandary右键,您需要设置'JsConfig.IncludePublicFields = true;'来序列化公共字段,请参阅:http://stackoverflow.com/a/15372520/85785 – mythz

6

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

JavaScriptSerializer serializer = new JavaScriptSerializer(); 

var Json = serializer.Serialize(myObject); 

要忽略的对象你序列化的特定属性,只需将[NonSerialized] attribure他们。

更新:

既然你想使用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

+2

我不想使用Microsoft序列化程序,因为它非常慢。我询问ServiceStack.Text – Tomas

+1

如果你对ServiceStack.Text特别感兴趣,那么什么阻止你下载他们的示例项目并只是看看? –

+0

ServiceStack网站甚至向您展示了如何使用它:http://www.servicestack.net/mythz_blog/?p=344 –

相关问题