2011-09-05 53 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 –