DataContract

数据契约(DataContract) 服务契约定义了远程访问对象和可供调用的方法,数据契约则是服务端和客户端之间要传送的自定义数据类型。

一旦声明一个类型为DataContract,那么该类型就可以被序列化在服务端和客户端之间传送,如下所示。

只有声明为DataContract的类型的对象可以被传送,且只有成员属性会被传递,成员方法不会被传递。WCF对声明为DataContract的类 型提供更加细节的控制,可以把一个成员排除在序列化范围以外,也就是说,客户端程序不会获得被排除在外的成员的任何信息,包括定义和数据。默认情况下,所 有的成员属性都被排除在外,因此需要把每一个要传送的成员声明为DataMember,如下所示。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Runtime.Serialization;

namespace KnockoutJson.Models
{
    [DataContract]
    public class Product
    {
        [DataMember]
        public int Id { get; set; }
        [DataMember]
        public string Name { get; set; }
        [DataMember]
        public string Brand { get; set; }
        [DataMember]
        public decimal Price { get; set; }
        [DataMember]
        public int Amount { get; set; }

        public Product(int id, string name, string brand, decimal price, int amount) 
        {
            this.Id = id;
            this.Name = name;
            this.Brand = brand;
            this.Price = price;
            this.Amount = amount;
        }

        static List<Product> allProducts = new List<Product>();

        static Product()
        {
            allProducts.Add(new Product(1, "笔记本电脑", "联想", 5600.00m, 100));
            allProducts.Add(new Product(2, "iPhone 5S", "苹果", 4999.00m, 50));
            allProducts.Add(new Product(3, "Android平板电脑", "爱国者", 3800.00m, 200));
        }

        public static List<Product> AllProducts()
        {
            return allProducts;
        }

        public static Product GetProduct(int id)
        {
            if (id < 1 || id > 3) return allProducts[0];
            return allProducts[id - 1];
        }

    }
}

 

posted @ 2013-05-19 09:54  当年Java小强  阅读(682)  评论(0编辑  收藏  举报