为了账号安全,请及时绑定邮箱和手机立即绑定

C#处理Json格式文件的源码演示

标签:
C++


把做工程过程比较好的一些内容片段做个收藏,下面的资料是关于C#处理Json格式文件的演示的内容。

string jsonText = @"{""input"" : ""value"", ""output"" : ""result""}";

JsonReader reader = new JsonTextReader(new StringReader(jsonText));

while (reader.Read())

{

Console.WriteLine(reader.TokenType + "tt" + reader.ValueType + "tt" + reader.Value);

}

(2)使用JsonWriter写字符串:

StringWriter sw = new StringWriter();

JsonWriter writer = new JsonTextWriter(sw);

writer.WriteStartObject();

writer.WritePropertyName("input");

writer.WriteValue("value");

writer.WritePropertyName("output");

writer.WriteValue("result");

writer.WriteEndObject();

writer.Flush();

string jsonText = sw.GetStringBuilder().ToString();

Console.WriteLine(jsonText);

(3)使用JObject读写字符串:

JObject jo = JObject.Parse(jsonText);

string[] values = jo.Properties().Select(item => item.Value.ToString()).ToArray();

(4)使用JsonSerializer读写对象(基于JsonWriter与JsonReader):

Project p = new Project() { Input = "stone", Output = "gold" };

JsonSerializer serializer = new JsonSerializer();

StringWriter sw = new StringWriter();

serializer.Serialize(new JsonTextWriter(sw), p);

Console.WriteLine(sw.GetStringBuilder().ToString());

StringReader sr = new StringReader(@"{""Input"":""stone"", ""Output"":""gold""}");

Project p1 = (Project)serializer.Deserialize(new JsonTextReader(sr), typeof(Project));

Console.WriteLine(p1.Input + "=>" + p1.Output);

  上面的代码都是基于下面这个Project类定义:

class Project

{

public string Input { get; set; }

public string Output { get; set; }

}

  此外,如果上面的JsonTextReader等类编译不过的话,说明是我们自己修改过的类,换成你们自己的相关类就可以了,不影响使用。3.内置方式:使用.NETFramework3.5/4.0中提供的System.Web.Script.Serialization命名空间下的JavaScriptSerializer类进行对象的序列化与反序列化,很直接。

Project p = new Project() { Input = "stone", Output = "gold" };

JavaScriptSerializer serializer = new JavaScriptSerializer();

var json = serializer.Serialize(p);

Console.WriteLine(json);

var p1 = serializer.Deserialize<Project>(json);

Console.WriteLine(p1.Input + "=>" + p1.Output);

Console.WriteLine(ReferenceEquals(p,p1));

 

 注意:如果使用的是VS2010,则要求当前的工程的TargetFramework要改成.NetFramework4,不能使用ClientProfile。当然这个System.Web.Extensions.dll主要是Web使用的,直接在Console工程中用感觉有点浪费资源。  此外,从最后一句也可以看到,序列化与反序列化是深拷贝的一种典型的实现方式。4.契约方式:使用System.Runtime.Serialization.dll提供的DataContractJsonSerializer或者JsonReaderWriterFactory实现。

Project p = new Project() { Input = "stone", Output = "gold" };

DataContractJsonSerializer serializer = new DataContractJsonSerializer(p.GetType());

string jsonText;

using (MemoryStream stream = new MemoryStream())

{

serializer.WriteObject(stream, p);

jsonText = Encoding.UTF8.GetString(stream.ToArray());

Console.WriteLine(jsonText);

}

using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonText)))

{

DataContractJsonSerializer serializer1 = new DataContractJsonSerializer(typeof(Project));

Project p1 = (Project)serializer1.ReadObject(ms);

Console.WriteLine(p1.Input + "=>" + p1.Output);

}

  这里要注意,这里的Project类和成员要加相关的Attribute:

[DataContract]

class Project

{

[DataMember]

public string Input { get; set; }

[DataMember]

public string Output { get; set; }

}

©著作权归作者所有:来自51CTO博客作者Cool_Manone的原创作品,如需转载,请注明出处,否则将追究法律责任


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消