質問で示したのは、無効な JSON です。私はあなたがこれを意味したと思います:
{
"ea:productionId": "123",
....
}
これは、モデルの属性をJson.NET
使用するシリアライザーで簡単に実現できます。[DataContract]
[DataMember]
[DataContract]
public class JsonClass
{
[DataMember(Name = "ea:productionId")]
public string ProductId { get; set; }
}
その後:
JsonClass result = JsonConvert.DeserializeObject<JsonClass>(jsonresult);
サードパーティの JSON シリアライザーを使用したくない場合はDataContractJsonSerializer
、DataContract および DataMember 属性も尊重する組み込みクラスを使用できます。
var serializer = new DataContractJsonSerializer(typeof(JsonClass));
byte[] data = Encoding.UTF8.GetBytes(jsonresult);
using (var stream = new MemoryStream(data))
{
var result = (JsonClass)serializer.ReadObject(stream);
}
アップデート:
.NET 2.0 を使用しているようで、新しいシリアライザーに頼ることができません。JavaScriptSerializer を使用すると、カスタム コンバーターを作成できます。
public class MyJavaScriptConverter : JavaScriptConverter
{
private static readonly Type[] supportedTypes = new[] { typeof(JsonClass) };
public override IEnumerable<Type> SupportedTypes
{
get { return supportedTypes; }
}
public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
{
if (type == typeof(JsonClass))
{
var result = new JsonClass();
object productId;
if (dictionary.TryGetValue("ea:productionId", out productId))
{
result.ProductId = serializer.ConvertToType<string>(productId);
}
... so on for the other properties
return result;
}
return null;
}
public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
{
throw new NotImplementedException();
}
}
その後:
var serializer = new JavaScriptSerializer();
serializer.RegisterConverters(new[] { new MyJavaScriptConverter() });
var result = serializer.Deserialize<JsonClass>(jsonresult);
または、モデルの代わりに弱く型付けされた辞書を使用できます。
var serializer = new JavaScriptSerializer();
var res = (IDictionary<string, object>)serializer.DeserializeObject(jsonresult);
string productId = res["ea:productionId"] as string;