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

时间:2011-09-05 11:02:26

标签: c# json servicestack

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

3 个答案:

答案 0 :(得分:19)

默认情况下,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<MyClass>();

编辑:

@Noah提及(来自评论)您还可以使用[IgnoreDataMember]属性排除单个属性。

答案 1 :(得分: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 :(得分:1)

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