我需要將JSON中表示的一些JavaScript對象反序列化爲適當的C#類。鑑於自動屬性的好處,我寧願讓它們在這些類中,而不是隻有字段。不幸的是,.NET序列化引擎(至少默認情況下)完全忽略了反序列化的自動屬性,而只關心後臺字段,這在JavaScript對象中顯然不存在。JSON的C#自動屬性反序列化
鑑於有no standard way to name backing fields,說實話,我甚至不想打擾「讓我們創建一個看起來像C#的支持字段的JavaScript對象」的方法,因爲它聽起來有點骯髒,唯一的辦法是我可以將JavaScript字段序列化爲C#自動屬性(如果我可以強制序列化引擎以某種方式忽略後備字段並直接使用該屬性)。不幸的是,我無法弄清楚這是如何完成的,或者是否可以完成。任何想法,將不勝感激。
編輯:下面是一個例子:
的Javascript:
function Cat()
{
this.Name = "Whiskers";
this.Breed = "Tabby";
}
var cat = new Cat();
然後,這是序列化到 「{名稱: '威威'}」。
C#的類:
[Serializable()]
public class Cat
{
public string Name { get; set; }
public string Breed { get; set; }
}
和反序列化碼,即失敗:
new DataContractJsonSerializer(typeof(Cat)).ReadObject(inputStream);
而且它是從異常顯而易見的是,因爲它正在尋找支持字段失敗。
EDIT2:這裏是例外,如果這能幫助(沒有內部異常):
System.Runtime.Serialization.SerializationException
「的數據合同類型 'Test.Cat' 不能因爲 所需的數據成員 '
<Name>k__BackingField, <Breed>k__BackingField
'不是 找到了。「
你可以發表你的意思嗎? – 2009-06-03 16:09:03
@John Saunders - 假設我有一個名爲「Cat」的JavaScript對象,其名稱爲「Name」,字段值爲「Whiskers」。假設這是用JSON表示的。我想抓住這個JSON並將其序列化爲C#Cat類的實例(由我編寫),以便序列化過程用「Whiskers」填充實例的自動屬性「Name」。 – 2009-06-03 16:11:45
...但問題是序列化程序正在尋找後臺字段(例如「 k_backingField」,但不一定使用此名稱),而不是「名稱」 –
2009-06-03 16:14:04