13

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

4

3 回答 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] 属性来排除单个属性。

于 2011-09-06T04:07:20.530 回答
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

于 2011-09-05T11:05:20.897 回答
1

servicestack 的测试证明,通过提供[DataContract]and[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

于 2012-04-12T05:35:38.150 回答