怎么用c#的josn设计一个通讯录的三星手机存储的通讯录

转自http://topmanopensource.iteye.com/blog/548948
JSONSerializer的toJSON方法可以把参数指定的对象转换成一个JSON接口的对象,如果这个对象是一个String对象,那么这个方法还会校验这个String对象是否是一个合法的JSON字符串(即是否符合JavaScript的语法)。对于一般JavaBean(必须是标准的具有setter\getter的JavaBean)的转换就是按照属性值对的方式生成JS对象,缺省的情况下Map会转换成对象,而List和数组会转换为数组。
JSONSerializer的toJava方法可以把JSON接口的对象转换为JavaBean对象,缺省情况下,JSON接口的对象会被转换为net.sf.ezmorph.bean.MorphDynaBean对象,所有基本类型(基本类型包装类)、数组和String类型的属性都会被准确的装换,而其他类型(如Map等)都会被缺省的转换为net.sf.ezmorph.bean.MorphDynaBean对象。
以上是使用JSONSerializer的缺省转换函数(一个参数)进行转换的结果,如果使用两个参数的转换函数(第二个参数为JsonConfig对象),则会按照JsonConfig的配置进行转换。toJSON转换时的配置:
setJsonPropertyFilter属性过滤,用于处理那些属性被过滤掉而不被转化换为JSON,嵌套引用的Bean的属性也可以被过滤。如下:
/* 使用属性过滤器 */
myBeanJc.setJsonPropertyFilter(new PropertyFilter() {
public boolean apply(Object o, String n, Object v) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& if (o instanceof MyBean && n.equals("beanMap")) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& MyBean mb = (MyBean)
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& if (mb.getBeanMap().keySet().isEmpty())
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& } else if (o instanceof MyInnerBean && n.equals("attrMap")) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& Map&String, String& m = (Map&String, String&)
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& if (m.keySet().isEmpty())
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& } else
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ;
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&&&& });&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
这个例子使用了匿名类的方式实现了一个自定义的属性过滤器,其实就是覆盖apply方法,这个方法的返回值决定是否把此属性过滤掉(true表示过滤掉此属性而不转化到JSON中)。json-lib本身提供一些实现了PropertyFilter的属性过滤器类供我们使用,如AndPropertyFilter, CompositePropertyFilter, FalsePropertyFilter, MappingPropertyFilter, NotPropertyFilter, OrPropertyFilter, TruePropertyFilter等,有兴趣的话可以逐个试验。
registerJsonBeanProcessor注册JsonBeanProcessor,使用JsonBeanProcessor处理bean对象到JSON接口对象的转换,它给我们提供了自定义的bean到JSON的转换的接口,通过注册自定义的JsonBeanProcessor我们可以按照自己的想法把bean转化成我们想要的样子。如下:
/* 使用JsonBeanProcessor处理bean对象到json对象的转换 */
&&&&&&&&&&&&&&&&&&&& myBeanJc.registerJsonBeanProcessor(MyInnerBean.class,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& new JsonBeanProcessor() {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& @Override
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public JSONObject processBean(Object o, JsonConfig jc) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& return JSONObject
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& .fromObject("{title : 'I am an inner bean!'}");
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& });
这个例子就给MyInnerBean注册了一个自定义的JsonBeanProcessor,使用匿名类的方式实现了processBean方法,processBean方法返回的JSON对象就是在进行bean到JSON转化时MyInnerBean对象转化成的JSON对象。
setJsonBeanProcessorMatcher可以设置用于匹配JsonBeanProcessor的自定义的匹配器JsonBeanProcessorMatcher,通过实现JsonBeanProcessorMatcher的getMatch方法(这个方法有两个参数,第一个是需要匹配的对象的Class对象,第二个参数是所有注册了JsonBeanProcessor的Class对象的集合),返回一个Calss对象,转换器会用以返回的Class对象注册的JsonBeanProcessor处理这个类的转换。如下:
/* 设置处理过程的注册类匹配器 */
&&&&&&&&&&&&&&&&&&&& myBeanJc
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& .setJsonBeanProcessorMatcher(new JsonBeanProcessorMatcher() {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& @Override
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public Object getMatch(Class c, Set s) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& if (c.equals(MyInnerBean.class))
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& return innerClzz.
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& });
这个例子使用匿名类实现了一个自定义的JsonBeanProcessorMatcher,覆盖了getMatch方法,它表示在bean到JSON的转化过程中,如果我们要处理的类是MyInnerBean类,则返回innerClzz类,这时就会使用innerClzz注册的JsonBeanProcessor来处理这个MyInnerBean,如果我们没有为innerClzz注册JsonBeanProcessor,则使用缺省的转化过程处理(属性值对的方式)。
registerJsonValueProcessor注册JsonValueProcessor,使用JsonValueProcessor处理Bean对象的属性值的转换,这里是为指定的数据类型注册JsonValueProcessor。如下:
/* 使用JsonValueProcessor处理Bean对象的属性值的转换 */
&&&&&&&&&&&&&&&&&&&& myBeanJc.registerJsonValueProcessor(Double.class,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& new JsonValueProcessor() {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& @Override
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public Object processArrayValue(Object arg0,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& JsonConfig arg1) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& @Override
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& public Object processObjectValue(String k, Object v,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& JsonConfig arg2) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& if (k.equals("dblVal"))
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& return Double.valueOf(v.toString())
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& .doubleValue()
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& * 100 + "%";
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& else
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& });
这个例子就是为双精度浮点型注册了一个JsonValueProcessor,需要我们覆盖两个方法,从名称就能明白它们是分别处理数组和对象中的指定数据类型的方法。在这里我们把属性dblVal的双精度浮点值转化为表示百分比的字符串,对于其他的双精度浮点值不做处理。
注册处理过程的方法都有其对应的反注册(unregisterXxProcessor)方法,同时还提供了查找这些处理过程的方法(findXxProcessor)。
setExcludes设置不作转换的属性名称,getExcludes可以返回设置的属性名称字符串数组,而getMergedExcludes可以返回所有不做转换的属性集合,包括setExcludes设置的属性名称。
setJavaIdentifierTransformer设置使用何种Java标识符的转换器,没太看懂,JavaIdentifierTransformer倒是挺好理解,可是这个转换功能如何使用,在什么时候使用呢?
setArrayMode设置数组的转换模式,也不会用。
setRootClass设置根对象目标类,也就是从JSON接口对象转换为bean时得到的对象的Java类,如果不设置的话,就转换为MorphDynaBean。
setNewBeanInstanceStrategy用于设置对象实例化时使用的策略,缺省的是使用Class的newInstance方法。从JSON接口对象转换成JavaBean对象时首先应用该策略,然后才会用JSON接口对象的内容为实例赋值。如下:
/* 设置对象实例化策略 */
&&&&&&&&&&&&&&&&&&&& myBeanJc.setNewBeanInstanceStrategy(new NewBeanInstanceStrategy() {
&&&&&&&&&&&&&&&&&&&&&&&&&&& @Override
&&&&&&&&&&&&&&&&&&&&&&&&&&& public Object newInstance(Class c, JSONObject jo)
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& throws InstantiationException, IllegalAccessException {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& O
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& if (c.equals(MyInnerBean.class)) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& String t = "Recovered " + jo.get("title");
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& jo.put("title", t);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& o = new MyInnerBean();
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }else
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& o = c.newInstance();
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&&&& });
这个例子中, 使用匿名类的方式覆盖newInstance方法,如果是MyInnerBean类则使用无参构造函数实例化对象,其他情况下使用缺省的实例化方式。因为从JSON接口对象转换成JavaBean对象时首先应用该策略,然后才会用JSON接口对象的内容为实例赋值,所以在这里为实例化对象赋值是没有意义的,如果想改变最后的bean的属性值,可以通过修改JSON对象的属性值来实现。
setClassMap应该是用于JSON和XML转换的,有待进一步研究。
此外还有其他相对简单的转换过程配置选项的功能,比较容易理解和使用,类似于开关量。如:disableEventTriggering() ,enableEventTriggering()等等。
浏览 10077
浏览: 42548 次
来自: 北京
这样解决了 json对象提交数据数据展示有啥办法没有
也有可能是编码问题。
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'AJAX传递复杂数据如果自己进行格式定义的话会经历组装、解析的过程,因此AJAX中有一个事实上的数据传输标准JSon。&Json将复杂对象序列化为一个字符串,在浏览器端再将字符串反序列化为JavaScript可以读取的对象。看一下Json的格式。Json被几乎所有语言支持。&C#中将.Net对象序列化为Json字符串的方法:&JavaScriptSerializer().Serialize(p),JavaScriptSerializer在System.Web.Extensions.dll中,是.Net3.x 中新增的类,如果在 .Net2.0中则需要用第三方的组件。&JQuery AJAX得到的data是Json格式数据,用 $.parseJSON(data)方法将JSon格式数据解析为JavaScript对象&可以在post函数 后一个函数传递"json"则data就是反序列化以后的对象,免去了parseJSON
案例:用Json将类返回给客户端,使用JQurey1.处理页设置 Json1.ashx
public void ProcessRequest(HttpContext context)
context.Response.ContentType = "text/plain";
JavaScriptSerializer jss = new JavaScriptSerializer();
//创建 JavaScriptSerializer
json = jss.Serialize(new person(){Name="xgao",Age=18 });
context.Response.Write(json);
public class person
public string Name { get; set; }
public int Age { get; set; }
2.JAVAscript设置
&script type="text/javascript"&
$(function() {
$.post("Json1.ashx", function(data, state) {
if (state == "success") {
var person = $.parseJSON(data);
//利用parseJSON进行转换
alert(person.Name);
alert(person.Age);
阅读(...) 评论()今天看啥 热点:
对象实例化 用json保存 泛型类 可以很方便的保存程序设置,用于永久化对象,什么程序都行,依赖NewtonSoft。用于json序列化和反序列化。
1 using Newtonsoft.J
3 using System.Collections.G
4 using System.IO;
5 using System.L
6 using System.T
7 using System.Threading.T
9 namespace ConfigHandler
public class ConfigHandler&T&
where T : class
const string SAVE_PATH = "jsonconfig/";
/// &summary&
/// 单例模式
/// &/summary&
private ConfigHandler()
/// &summary&
/// 获取保存地址,默认是泛型参数T的类型名称
/// &/summary&
/// &returns&&/returns&
private static string GetSavePath()
if (!Directory.Exists(SAVE_PATH))
Directory.CreateDirectory(SAVE_PATH);
return $"{SAVE_PATH}{typeof(T).ToString()}.json";
/// &summary&
/// 保存配置
/// &/summary&
public static void Save(T _config)
config = _
string json = JsonConvert.SerializeObject(_config);
using (var sw = new StreamWriter(GetSavePath()))
sw.WriteAsync(json);
catch (Exception)
/// &summary&
/// 获取配置信息
/// &/summary&
/// &returns&&/returns&
public static T Load()
if (config == null)
string json = "";
using (var sr = new StreamReader(GetSavePath()))
json = sr.ReadToEnd();
if (json != "")
config = JsonConvert.DeserializeObject&T&(json);
config = null;
catch (Exception)
config = null;
using ConfigH
using ConsoleApplication1;
using System.Collections.G
using System.L
using System.T
using System.Threading.T
namespace ConsoleApplication1
class Program
static void Main(string[] args)
MyConfig config = new MyConfig();
config = new MyConfig();
config.name = "leiming";
config.Age = 20;
config.Time = DateTime.N
ConfigHandler&MyConfig&.Save(config);
config = ConfigHandler&MyConfig&.Load();
Console.WriteLine(config.ToString());
Console.ReadKey();
class MyConfig
public int Hello{get;set;}
public string name { get; set; }
public int Age { get; set; }
public DateTime Time { get; set; }
public override string ToString()
return $"Name={name},Age={Age},Time={Time.ToShortDateString()}";
相关搜索:
相关阅读:
相关频道:
&&&&&&&&&&&&&&&&&&&&
C#教程最近更新C#写了一个简单web服务器,处理get请求后返回json的求教!【c#吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:118,070贴子:
C#写了一个简单web服务器,处理get请求后返回json的求教!收藏
用C#写了一个简单web服务器,处理get请求后返回json,客户端通过浏览器发送GET到服务器,服务器根据GET中的参数做对应操作后答复客户端!请问如何操作?比如就是switch中的各个方法,answer=true的时候答复callback([cmd,{&Result&:&True&}]),失败返回callback([cmd,{&Result&:&False&}])using Susing System.Collections.Gusing System.Collections.Susing System.IO;using System.Lusing System.Nusing System.Net.Susing System.Tusing System.Tnamespace WK{
class HttpServer
private TcpListener myL
#region 构造方法
public HttpServer()
//开始兼听8000端口
myListener = new TcpListener(IPAddress.Parse(&127.0.0.1&), 8000);
myListener.Start();
//同时启动一个兼听进程 StartListen
Thread th = new Thread(new ThreadStart(StartListen));
th.Start();
catch (Exception)
#endregion
void StartListen()
int httpIndex = 0;
//控制命令
//微信验证码
//发送消息内容
string addS
//点歌歌曲信息
string insertS
//置顶歌曲信息
while (true)
//接受新连接
Socket mySocket = myListener.AcceptSocket();
if (mySocket.Connected)
Byte[] bReceive = new Byte[1024];
int i = mySocket.Receive(bReceive, bReceive.Length, 0);
//转换成字符串
string sBuffer = Encoding.UTF8.GetString(bReceive);
//只处理&GET&请求类型
if (sBuffer.Substring(0, 3) != &GET&)
mySocket.Close();
// 查找 &HTTP& 的位置
httpIndex = sBuffer.IndexOf(&HTTP&, 1);
//获取到参数
string result = sBuffer.Substring(6, httpIndex - 7);
//获取参数值
NameValueCollection col = GetQueryString(result);
cmd = Convert.ToInt32(col[&cmd&]);
ip = col[&tip&];
wxcode = Convert.ToInt32(col[&wxcode&]);
msg = col[&msg&];
addSong = col[&addSong&];
insertSong = col[&insertSong&];
FaSong send = new FaSong(ip);
#region 根据参数结果发送播控接口
switch (cmd)
answer = send.Bind(wxcode);
answer = send.Repeat();
answer = send.Next();
answer = send.ZT();
answer = send.ZT();
answer = send.YCBC();
answer = send.YCBC();
answer = send.VolCut();
answer = send.VolAdd();
answer = send.MicCut();
answer = send.MicAdd();
answer = send.Add(addSong);
answer = send.GZ();
answer = send.KS();
answer = send.HC();
answer = send.DC();
answer = send.RH();
answer = send.ML();
answer = send.DG();
answer = send.SQ();
answer = send.Service();
answer = send.Content(msg);
answer = send.Insert(insertSong);
#endregion
mySocket.Close();
/// &summary&
/// 将字符串解析转换为名值集合.
/// &/summary&
/// &param name=&queryString&&字符串&/param&
/// &returns&&/returns&
NameValueCollection GetQueryString(string queryString)
NameValueCollection result = new NameValueCollection(StringComparer.OrdinalIgnoreCase);
if (!string.IsNullOrEmpty(queryString))
int count = queryString.L
for (int i = 0; i & i++)
int startIndex =
int index = -1;
while (i & count)
char item = queryString[i];
if (item == '=')
if (index & 0)
else if (item == '&')
string key =
string value =
if (index &= 0)
key = queryString.Substring(startIndex, index - startIndex);
value = queryString.Substring(index + 1, (i - index) - 1);
key = queryString.Substring(startIndex, i - startIndex);
result[key] =
if ((i == (count - 1)) && (queryString[i] == '&'))
result[key] = string.E
java和c#哪个前景好多少钱-万和教育,免费入学试听,零基础即学,只需120天,让你从完成低级菜鸟到IT大神的华丽转变!
没有详细的看代码,C#编写的web服务器,用的是 wcf还是web service?webservice好像只能支持 xml格式。json格式的话,需要客户端那边在转换,好像
你可以直接用web api,返回json数据也是可以的。返回数据,无非就是操作成功或者失败的json数据不同。但是格式基本一致的
tcp?楼上正解。
登录百度帐号C#中json的命名空间是哪个,还要添加什么引用?_百度知道
C#中json的命名空间是哪个,还要添加什么引用?
我有更好的答案
说的是序列化为Json字符串吧,序列化方法,命名空间:S反序列化方法:public T Deserialize&T&gt:public void Serialize(object obj, StringBuilder output).W(string input);public object Deserialize(string input.Web.Script.Serialization引用:System,如果是的话, Type targetType);public object DeserializeObject(string input).Extensions.dll, 类名:JavaScriptSpublic string Serialize(object obj)
为什么都是关于序列化的呢?我就不明白了,这不是我要找的答案,谢谢你!
或者是System.Runtime.Serialization.J 引用System.Runtime.Serialization.dll,System.ServiceModel.dll,System.ServiceModel.Web.dll
采纳率:28%
.这个就可以,是微软自带的;2:System.Data.或者LitJson.DataSetExtensions.dll使用时,添加引用:using System.Runtime.Serialization.Json.dll3.或者Newtonsoft
为您推荐:
其他类似问题
您可能关注的内容
json的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 微信存储通讯录 的文章

 

随机推荐