C# 以编程方式实现Json.Net序列化
我必须将一些信息序列化为json,然后将它们写入一个文件。 实际上,我想要达到的结果是:C# 以编程方式实现Json.Net序列化,c#,json,serialization,C#,Json,Serialization,我必须将一些信息序列化为json,然后将它们写入一个文件。 实际上,我想要达到的结果是: { "Email": "james@example.com", "Active": true, "CreatedDate": "2013-01-20T00:00:00Z", "libraries": [ { "name": "name1" }, { "name": "name2" } ] } { "Email": "james
{
"Email": "james@example.com",
"Active": true,
"CreatedDate": "2013-01-20T00:00:00Z",
"libraries": [
{
"name": "name1"
},
{
"name": "name2"
}
]
}
{
"Email": "james@example.com",
"Active": true,
"CreatedDate": "2013-01-20T00:00:00Z",
"libraries": [
"Small",
"Medium",
"Large"
]
}
这是我用来存储信息的类:
public class JSON
{
public string Email { get; set; }
public bool Active { get; set; }
public DateTime CreatedDate { get; set; }
public string[] libraries { get; set; }
}
然后我用这个来序列化它们:
JSON account = new JSON
{
Email = "james@example.com",
Active = true,
CreatedDate = new DateTime(2013, 1, 20, 0, 0, 0, DateTimeKind.Utc),
libraries = new[] {"Small","Medium","Large" }
};
string json = JsonConvert.SerializeObject(account, Formatting.Indented);
问题是,实际上我得到的结果是:
{
"Email": "james@example.com",
"Active": true,
"CreatedDate": "2013-01-20T00:00:00Z",
"libraries": [
{
"name": "name1"
},
{
"name": "name2"
}
]
}
{
"Email": "james@example.com",
"Active": true,
"CreatedDate": "2013-01-20T00:00:00Z",
"libraries": [
"Small",
"Medium",
"Large"
]
}
如何解决此问题?将您的JSON类更改为以下类型:
public class Library
{
public string name { get; set; }
}
public class JSON
{
public string Email { get; set; }
public bool Active { get; set; }
public string CreatedDate { get; set; }
public List<Library> libraries { get; set; }
}
公共类库
{
公共字符串名称{get;set;}
}
公共类JSON
{
公共字符串电子邮件{get;set;}
公共bool活动{get;set;}
公共字符串CreatedDate{get;set;}
公共列表库{get;set;}
}
如何使用在线工具生成课程
好的提示是使用它来生成C#类
如何使用Visual Studio生成类
另一种选择是使用内置的Visual Studio功能(适用于VS2013及更高版本)
如果剪贴板中有JSON文件,您可以:
编辑->粘贴特殊->将JSON粘贴为类
如何使用新类
JSON account = new JSON
{
Email = "james@example.com",
Active = true,
CreatedDate = new DateTime(2013, 1, 20, 0, 0, 0, DateTimeKind.Utc),
libraries = new List<Library>
{
new Library {name = "Small"},
new Library {name = "Medium"},
new Library {name = "Large"}
}
};
JSON帐户=新的JSON
{
电子邮件=”james@example.com",
活动=真,
CreatedDate=新的日期时间(2013,1,20,0,0,0,DateTimeKind.Utc),
库=新列表
{
新库{name=“Small”},
新库{name=“Medium”},
新库{name=“Large”}
}
};
将JSON类更改为此类:
public class Library
{
public string name { get; set; }
}
public class JSON
{
public string Email { get; set; }
public bool Active { get; set; }
public string CreatedDate { get; set; }
public List<Library> libraries { get; set; }
}
公共类库
{
公共字符串名称{get;set;}
}
公共类JSON
{
公共字符串电子邮件{get;set;}
公共bool活动{get;set;}
公共字符串CreatedDate{get;set;}
公共列表库{get;set;}
}
如何使用在线工具生成课程
好的提示是使用它来生成C#类
如何使用Visual Studio生成类
另一种选择是使用内置的Visual Studio功能(适用于VS2013及更高版本)
如果剪贴板中有JSON文件,您可以:
编辑->粘贴特殊->将JSON粘贴为类
如何使用新类
JSON account = new JSON
{
Email = "james@example.com",
Active = true,
CreatedDate = new DateTime(2013, 1, 20, 0, 0, 0, DateTimeKind.Utc),
libraries = new List<Library>
{
new Library {name = "Small"},
new Library {name = "Medium"},
new Library {name = "Large"}
}
};
JSON帐户=新的JSON
{
电子邮件=”james@example.com",
活动=真,
CreatedDate=新的日期时间(2013,1,20,0,0,0,DateTimeKind.Utc),
库=新列表
{
新库{name=“Small”},
新库{name=“Medium”},
新库{name=“Large”}
}
};
您可以使用自定义转换器:
public class ArrayItemAsObjectConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(string[]);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
string[] items = (string[])value;
writer.WriteStartArray();
for (int i = 0; i < items.Length; i++)
{
writer.WriteStartObject();
writer.WritePropertyName("name");
writer.WriteValue(items[i]);
writer.WriteEndObject();
}
writer.WriteEndArray();
}
}
///
[JsonConverter(typeof(ArrayItemAsObjectConverter))]
public string[] libraries { get; set; }
public类ArrayItemAsObjectConverter:JsonConverter
{
公共覆盖布尔CanConvert(类型objectType)
{
返回objectType==typeof(字符串[]);
}
公共重写对象ReadJson(JsonReader阅读器,类型objectType,对象existingValue,JsonSerializer序列化程序)
{
抛出新的NotImplementedException();
}
公共重写void WriteJson(JsonWriter编写器、对象值、JsonSerializer序列化器)
{
字符串[]项=(字符串[])值;
writer.writestarray();
对于(int i=0;i
您可以使用自定义转换器:
public class ArrayItemAsObjectConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(string[]);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
string[] items = (string[])value;
writer.WriteStartArray();
for (int i = 0; i < items.Length; i++)
{
writer.WriteStartObject();
writer.WritePropertyName("name");
writer.WriteValue(items[i]);
writer.WriteEndObject();
}
writer.WriteEndArray();
}
}
///
[JsonConverter(typeof(ArrayItemAsObjectConverter))]
public string[] libraries { get; set; }
public类ArrayItemAsObjectConverter:JsonConverter
{
公共覆盖布尔CanConvert(类型objectType)
{
返回objectType==typeof(字符串[]);
}
公共重写对象ReadJson(JsonReader阅读器,类型objectType,对象existingValue,JsonSerializer序列化程序)
{
抛出新的NotImplementedException();
}
公共重写void WriteJson(JsonWriter编写器、对象值、JsonSerializer序列化器)
{
字符串[]项=(字符串[])值;
writer.writestarray();
对于(int i=0;i
使用Visual Studio,您可以创建以下类:
public class Rootobject
{
public string Email { get; set; }
public bool Active { get; set; }
public DateTime CreatedDate { get; set; }
public Library[] libraries { get; set; }
}
public class Library
{
public string name { get; set; }
}
您需要复制json字符串并将其粘贴为json类。转到菜单,然后单击编辑,您将找到它
及
使用System.Web.Script.Serialization;
JavaScriptSerializer oJS=新的JavaScriptSerializer();
RootObject oRootObject=新的RootObject();
oRootObject=oJS.Deserialize(您的JSon字符串);
使用Visual Studio,您可以创建以下类:
public class Rootobject
{
public string Email { get; set; }
public bool Active { get; set; }
public DateTime CreatedDate { get; set; }
public Library[] libraries { get; set; }
}
public class Library
{
public string name { get; set; }
}
您需要复制json字符串并将其粘贴为json类。转到菜单,然后单击编辑,您将找到它
及
使用System.Web.Script.Serialization;
JavaScriptSerializer oJS=新的JavaScriptSerializer();
RootObject oRootObject=新的RootObject();
oRootObject=oJS.Deserialize(您的JSon字符串);
我该怎么办?libraries=new[]{“Small”、“Medium”、“Large”}如果使用公共库[]库{get;set;}而不是公共列表库{get;set;},则效果很好。这给了我一个转换错误是的,你是对的。我又更新了一次示例。您可以使用数组或列表。我该如何处理它?libraries=new[]{“Small”、“Medium”、“Large”}如果使用公共库[]库{get;set;}而不是公共列表库{get;set;},则效果很好。这给了我一个转换错误是的,你是对的。我又更新了一次示例。您可以使用数组或列表。